Разница между JPanel, JFrame, JComponent и JApplet

Я делаю физический симулятор для развлечения и искал туториалы по графике, когда пытался понять разницу между всеми этими буквами J. Может ли кто-нибудь уточнить их или, возможно, предоставить ссылку на полезный источник?


person Andyroo    schedule 16.08.2010    source источник


Ответы (3)


Эти классы являются общими точками расширения для дизайна пользовательского интерфейса Java. Во-первых, поймите, что они не обязательно имеют прямое отношение друг к другу, поэтому попытка найти взаимосвязь между ними может быть контрпродуктивной.

JApplet — базовый класс, позволяющий писать код, который будет выполняться в контексте браузера, например, для интерактивной веб-страницы. Это круто и все такое, но это приносит ограничения, которые являются платой за хорошую игру в реальном мире. Обычно JApplet используется, когда вы хотите иметь собственный пользовательский интерфейс на веб-странице. Я всегда задавался вопросом, почему люди не используют апплеты для хранения состояния сеанса, чтобы не требовалась ни база данных, ни файлы cookie.

JComponent — базовый класс для объектов, предназначенных для взаимодействия с Swing.

JFrame — используется для представления того, что должно быть в окне. Это включает в себя границы (изменяемый размер y/n?), панель заголовка (имя приложения или другое сообщение), элементы управления (разрешено сворачивать/разворачивать?) и обработчики событий для различных системных событий, таких как «закрытие окна» (разрешить приложению выйти еще?).

JPanel — универсальный класс, используемый для объединения других элементов. Это более важно при работе с визуальным макетом или одним из предоставленных менеджеров макетов, например. gridbaglayout и т. д. Например, у вас есть текстовое поле, которое больше зарезервированной области. Поместите текстовое поле в панель прокрутки и поместите эту панель в JPanel. Затем, когда вы разместите JPanel, она будет более управляемой с точки зрения макета.

person Kelly S. French    schedule 16.08.2010

JFrame и JApplet являются контейнерами верхнего уровня. Если вы хотите создать настольное приложение, вы будете использовать JFrame, а если вы планируете разместить свое приложение в браузере, вы будете использовать JApplet.

JComponent — это абстрактный класс для всех компонентов Swing, и вы можете использовать его в качестве базового класса для вашего нового компонента. JPanel — это простой и удобный компонент, который вы можете использовать практически для чего угодно.

Так как это для забавного проекта, самый простой способ для вас — работать с JPanel, а затем размещать его внутри JFrame или JApplet. В Netbeans есть визуальный конструктор для Swing с простыми примерами.

person aco    schedule 16.08.2010

Вам может быть полезно найти классы на веб-сайте Oracle, например:

https://docs.oracle.com/en/java/javase/15/docs/api/java.desktop/javax/swing/JFrame.html

Там вы можете видеть, что JFrame расширяет JComponent и JContainer.

JComponent — это базовый объект, который можно рисовать. JContainer расширяет его, чтобы вы могли добавлять к нему компоненты. JPanel и JFrame расширяют JComponent, так что вы можете добавлять к ним что-то. JFrame предоставляет окно, тогда как JPanel — это просто панель, которая находится внутри окна.

person Ultimate Gobblement    schedule 16.08.2010
comment
В качестве примечания: цепочка наследования для некоторых компонентов Swing нелепа. Это имеет тенденцию делать бесполезным завершение кода в IDE, а также загромождать javadocs. Им действительно нужно переписать эту вещь - person TheLQ; 17.08.2010
comment
Я хотел бы отметить, что JFrame не расширяет JComponent или JContainer, а скорее java.awt.Container и java.awt.Component в таком порядке. - person Lucas; 04.08.2013
comment
@LucasMorgan Должно быть, они сделали JFrame менее зависимым от Swing, чем я думал. Поскольку он использует AWT, мне интересно, можете ли вы использовать JFrame в JApplet. - person Kelly S. French; 08.09.2015