Различия между компонентами и легким/тяжелым весом

В чем разница между JPanel и JFrame и отношением к легкому, тяжеловесу?

Ответ 1

JPanel - это контейнер, который позволяет объединить несколько компонентов интерфейса. JFrame - это окно, написанное с помощью Swing.

Все компоненты Swing являются так называемыми компонентами lightwight, потому что они написаны в java. Если, например, вы запускаете приложение Swing и пытаетесь его проанализировать с помощью инструмента анализа пользовательского интерфейса (например, WinSpy в Windows), вы видите только один элемент: само окно (JFrame). Все остальные компоненты взяты из точки зрения ОС.

Тяжелый API - AWT использует портативные элементы, предоставляемые ОС. Поскольку java должен быть переносимым между различными операционными системами, AWT очень ограничен. Он реализует только минимальное подмножество элементов экрана, поддерживаемых всеми платформами. Однако элементы AWT отображаются непосредственно на соответствующие элементы платформы, поэтому инструмент обнаружения пользовательского интерфейса увидит их. Эти элементы называются "тяжелый вес".

Ответ 2

Тяжелые компоненты, такие как компоненты AWT, должны быть нарисованы с использованием собственного GUI на определенной платформе.

В тех случаях, когда легкие компоненты, такие как компоненты "Swing", нарисованы java и не полагаются на собственный GUI.

Ответ 3

JFrame - это контейнер Swing с интерфейсом и может быть автономным приложением (он имеет верхнюю бокс с возможностями минимизации, максимизации и выхода), тогда как JPanel - это все, что JFrame (контейнер Swing) минус способность быть автономной. Чтобы JPanel работал, он должен быть внутри чего-то вроде фрейма, например JFrame.

В другом ответе есть хорошее определение легких и тяжеловесных компонентов.

использование: Я использую JPanels в JFrames, чтобы легко запускать многопоточные программы, которые интегрируются вместе (у меня есть класс исполняемых JPanel внутри моего класса, который расширяет JFrame, я запускаю его как собственный поток, а класс JPanel может изменять значение переменных в классе JFrame). Я использую его, чтобы легко получить разные потоки, чтобы взаимодействовать друг с другом. ** Вы можете иметь несколько JPanels внутри JFrame.

Ответ 4

Основное различие между Swing и AWT заключается в том, что Swing API являются чисто Java-библиотеками, то есть они вовсе не зависят от собственных библиотек для рисования графических компонентов. Благодаря этой функции они обеспечивают постоянный внешний вид на всех платформах. Библиотеки AWT требуют поддержки родных графических библиотек, а некоторые из их компонентов графического интерфейса выглядят по-разному на разных платформах. Кроме того, компоненты Swing не являются неотъемлемой частью Thread safe, вам явно нужно написать синхронизированный код для манипулирования или перерисовки, тогда как AWT-компонентам можно доверять в многопоточной среде. Компоненты AWT называются тяжеловесными компонентами из-за их зависимости от родных библиотек. Компоненты Swing называются легкими из-за их независимости от родных библиотек. Следовательно, операции Swing выполняются намного быстрее, потому что каждая операция выполняется в среде Java runtime env и не требуется делегирование событий или команд в собственные библиотеки.