Swing | это... Что такое Swing? (original) (raw)

У этого термина существуют и другие значения, см. Свинг.

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

Swing относится к библиотеке классов JFC, которая представляет собой набор библиотек для разработки графических оболочек. К этим библиотекам относятся Java 2D, Accessibility-API, Drag & Drop-API и AWT.

Содержание

История

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

Архитектура

Look and Feel

Архитектура Swing разработана таким образом, что вы можете изменять «look and feel» (L&F) вашего приложения. «Look» определяет внешний вид компонентов, а «Feel» — их поведение. Sun’s JRE предоставляет следующие L&F[1]:

Сравнение с AWT

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

Компоненты Swing поддерживают специфические динамически подключаемые виды и поведения (англ. plugable look-and-feel), благодаря которому возможна адаптация к графическому интерфейсу платформы (то есть к компоненту можно динамически подключить другой, специфический для операционной системы, в том числе и созданный программистом вид и поведение). Таким образом, приложения, использующие Swing, могут выглядеть как родные приложения для данной операционной системы. Основным минусом таких «легковесных» (англ. Lightweight) компонентов является относительно медленная работа. Положительная сторона — универсальность интерфейса созданных приложений на всех платформах.

Принцип Lightweight

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

Сравнение с SWT

Примеры

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

import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.SwingUtilities;

public final class HelloWorld implements Runnable {

 public static void main(String[] args) {

     // Swing имеет собственный управляющий поток (т.н. dispatching thread),
     // который работает параллельно с основным (стартовым, в котором выполняется main())
     // потоком. Это означает что если основной поток закончит работу (метод main завершится),
     // поток отвечающий за работу Swing-интерфейса может продолжать свою работу. 
     // И даже если пользователь закрыл все окна, программа продолжит свою работу 
     // (до тех пор, пока жив данный поток). Начиная с Java 6, когда все компоненты уничтожены,
     // управляющий интерфейсом поток останавливается автоматически.
     // 
     // Запускаем весь код, работающий с интерфейсом, в управляющем потоке, даже инициализацию:

     SwingUtilities.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!")); - старый стиль
     f.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"); }

Использование системного Look-And-Feel:

//Необходимо помнить, что изменение L&F приложения должно быть выполнено до //инициализации каких-либо компонентов Swing, иначе они могут быть инициализированы //Java L&F, независимо от того, какой L&F вы запрашивали. public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { //Exception handle }

См. также

Ссылки

Примечания

  1. How to Set the Look and Feel (The Java™ Tutorials > Creating a GUI With JFC/Swing > Modifying the Look and Feel)

Литература

Просмотр этого шаблона Инструменты разработки элементов графического интерфейса
Низко-уровневые Macintosh Toolbox/CarbonWindows API • Intrinsics • Intuition • Xlib
Высоко-уровневые Amiga OS BOOPSI • Magic User Interface • Zune • ReAction GUI Mac OS и Mac OS X Cocoa • MacApp • MacZoop • PowerPlant Microsoft Windows Microsoft Foundation ClassesWindows Template Library • SmartWin++ • Object Windows LibraryVisual Component LibraryWindows FormsWindows Presentation Foundation UNIX, под X XawMotifLessTif • InterViews Кросс-платфор-менные На основе Flash ASWing • Adobe FlexGnash • SWF2EXE Software На основе XML,AJAX или SVG Ample SDK • CougarXML • Dojo Toolkit • Echo • ExtJSGladeXMLGoogle Web ToolkitjQuery • Lively Kernel • MooTools • Pyjamas • qooxdoo • Rialto Toolkit • script.aculo.us • XML User Interface • XULYahoo! UI Library На основе Java Abstract Window ToolkitSwingStandard Widget ToolkitQt Jambi На основеC или C++ Agar • CEGUI • Component Library for Cross Platform • dlib C++ Library • FLTKFOX toolkit • OpenGL User Interface Library • GTK+IUPJuce • JX Application Framework • Qt • TnFOX • Visual Component Framework • wxWidgets • YAAF • XForms • XVT • Ultimate++ На основе Common Lisp CAPI • Common Graphics • CLIM • McCLIM • Garnet На основе Pascal IP Pascal • LazarusfpGUIFireMonkey На основе Python Pyjamas • PyQtPyGTK • PyGUI • wxPython • PySideTkinter На основе Objective C GNUstep На основе других Tk