Swing (библиотека)

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая EvgenyGenkinBot (обсуждение | вклад) в 17:20, 24 января 2008 (удаление коммерческой ссылки из выходных данных литературы). Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску
Пример Swing-интерфеса для X Window System.

Swing — библиотека для создания графического интерфейса на языке Java. Swing был разработан компанией Sun Microsystems. Он содержит ряд графических компонентов, таких как кнопки, поля ввода, таблицы и т. д.

Swing относится к Java Foundation Classes (JFC), которая представляет из себя набор библиотек для разработки графических оболочек. К этим библиотекам относятся Java2D, Accessibility-API, Drag & Drop-API и Abstract Window Toolkit (AWT).

Swing предоставляет более гибкие интерфесные компоненты чем более ранняя библиотека Abstract Window Toolkit (AWT). В отличии от AWT, компоненты Swing разработаны для одинаковой кросс-платформенной работы, в то время как компоненты AWT повторяют интерфейс исполняемой платформы без изменений. Swing поддерживает подключаемый Look-And-Feel, благодаря которому возможна адаптация к графическому интерфейсу платформы. Таким образом приложения, использующие Swing, могут выглядеть как родные приложения для данной операционной системы. Основным минусом таких «легковесных» (Lightweight) компоментов является относительно медленная работа. Положительная сторона — универсальность интерфейса созданных приложений на всех платформах.

Lightweight

«Lightweight» означает, что компоненты Swing отрисовываются самими компонентами на поверхности родительского окна, без использования компонентов ОС. В отличии от «Тяжелых» компонентов AWT, в приложении Swing может иметься только одно окно (хотя может быть и несколько), и все прочие компоненты отрисовываются на ближайшем родителе, имеющем собственное окно (например, на JFrame). В приложении могут сочетаться Swing и AWT элементы, хотя это может порождать некоторые проблемы — в частности, компоненты AWT всегда перекрывают Swing элементы, в частности AWT компоненты закрывают собой всплывающие меню JPopupMenu и JComboBox. Для предотвращения этого, у этих компонентов имеются методы setLightWeightPopupEnabled(boolean), позволяющие запретить использование «Легковесных» всплывающих элементов. При установке свойства в true (setLightWeightPopupEnabled(true)), AWT элементы не будут перекрывать меню.

История

Начиная с версии Java 1.2 Swing (1998 год) включён в Java Runtime Environment.

Архитектура

Look and Feel

Сравнение с AWT

В отличии от Swing, AWT использует только стандартные элементы ОС для отображния, т.е. для каждого элемента создается отдельный объект ОС (окно), всвязи с чем, AWT не позволяет создавать элементы произвольной формы (возможно использовать только прямоугольные компоненты), элементы управления на основе AWT всегда отображаются поверх Swing-элементов (т.к. все Swing компоненты отображаются на поверхности контейнера).

Сравнение с SWT

Примеры

«Hello World» с использованием Swing'а:

 import javax.swing.JFrame;
 import javax.swing.JLabel;
 import java.awt.EventQueue; 
 
 public final class HelloWorld implements Runnable {
 
     public static void main(String[] args) {

         // Swing имеет собственный управляющий поток (т.н. dispatching thread),
         // который работает параллельно с основным (стартовым, в котором выполняется main())
         // потоком. Это означает что если основной поток закончит работу (метод main завершится),
         // поток отвечающий за работу Swing-интерфейса может продолжать свою работу. 
         // И даже если пользователь закрыл все окна, программа продолжит свою работу 
         // (до тех пор, пока жив данный поток). Начиная с Java 6, когда все компоненты уничтожены,
         // управляющий интерфейсом поток останавливается автоматически.
         // 
         // Запускаем весь код работающий с интерфейсом в управляющем потоке, даже инициализацию:
 
         EventQueue.invokeLater (new HelloWorld());
     } 
 
     public void run() {
 
         // Создаем окно с заголовком "Hello, World!"
 
         JFrame f = new JFrame ("Hello, World!");

         // Ранее практиковалось следующее: создавался listener и регистрировался
         // на экземпляре главного окна, который реагировал на windowClosing() 
         // принудительной остановкой виртуальной машины вызовом System.exit()
         // Теперь же есть более "правильный" способ задав реакцию на закрытие окна.
         // Данный способ уничтожает текущее окно, но не останавливает приложение. Тем
         // самым приложение будет работать пока не будут закрыты все окна.
 
         f.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);
 
         // однако можно задать и так:
         //            f.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

         // Добавляем на панель окна нередактируемый компонент с текстом.
  
         f.getContentPane().add (new JLabel("Hello, World!"));
  
         // pack() "упаковывает" окно до оптимального размера, рассчитаного на основании размеров 
         // всех расположеных в нем компонентов.
 
         f.pack();

         // Показать окно

         f.setVisible(true);
     }
 }

Смена вида интерфейса с помощью Look-And-Feel:

try { 
    UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
    SwingUtilities.updateComponentTreeUI(this); 
}
catch (Exception e){
    System.out.println("Ошибка при загрузке Metal-Look-And-Feel");
}

См. также

Ссылки

Литература

  • Герберт Шилдт. SWING: руководство для начинающих = SWING: A BEGINNER'S GUIDE. — М.: «Вильямс», 2007. — С. 704. — ISBN 0-07-226314-8.