Swing

Swing
Пример Swing-интерфейса для X Window System.

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]:

  • CrossPlatformLookAndFeel — это родной L&F для Java-приложений (так же называется Metal). Он используется по умолчанию, обеспечивая стандартное поведение компонентов и их внешний вид, вне зависимости от платформы, на которой запускается приложение.
  • SystemLookAndFeel — в этом случае приложение использует L&F, который является родным для системы, на которой запущено приложение. Системный L&F определяется во время выполнения. Для Windows используется «Windows» L&F, который имитирует особенности конкретной системы, на которой запущен — классический Windows, XP, или Vista. Для Linux и Solaris используется «GTK+», если установлен GTK+ 2.2 или более поздняя версия, в противном случае используется «Motif».
  • Synth — основа для создания собственных L&F.
  • Multiplexing — предоставляет возможность использования различных L&F одновременно.

Сравнение с 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)

Литература



Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать реферат

Полезное


Смотреть что такое "Swing" в других словарях:

  • swing — swing …   Dictionnaire des rimes

  • swing — [ swiŋ ] n. m. • 1895; mot angl., de to swing « balancer » ♦ Anglic. I ♦ 1 ♦ Boxe Coup de poing donné en ramenant le bras de l extérieur à l intérieur. « Joe Mitchell, d un furieux swing du droit, fendit l arcade sourcilière de son adversaire »… …   Encyclopédie Universelle

  • Swing — may refer to:ports* Swing bowling, a subtype of fast bowling in cricket * Golf swing * Baseball swing * Swing (boxing)Dance* Swing (dance) ** West Coast Swing ** East Coast Swing ** Lindy Hop ** Jive (dance)MusicKey concepts* Swung note, changes… …   Wikipedia

  • swing — [swiŋ] vi. swung, swinging [ME swingen < OE swingan, akin to Ger schwingen, to brandish < IE base * sweng , to curve, swing] 1. to sway or move backward and forward with regular movement, as a freely hanging object or a ship at anchor;… …   English World dictionary

  • Swing — Swing, n. 1. The act of swinging; a waving, oscillating, or vibratory motion of a hanging or pivoted object; oscillation; as, the swing of a pendulum. [1913 Webster] 2. Swaying motion from one side or direction to the other; as, some men walk… …   The Collaborative International Dictionary of English

  • Swing — bezeichnet Swing (Musikrichtung), Musikrichtung, die in den 1930ern aus der Jazz Tanzmusik entstand Swing (Rhythmus), fließende Rhythmik, die eines der wesentlichsten Elemente des Jazz darstellt Swing (Tanz), Tanzstil, der in den 1930ern in den… …   Deutsch Wikipedia

  • swing — ► VERB (past and past part. swung) 1) move back and forth or from side to side while or as if suspended. 2) move by grasping a support and leaping. 3) move in a smooth, curving line. 4) (swing at) attempt to hit or punch. 5) shift from one… …   English terms dictionary

  • Swing — Swing, v. t. 1. To cause to swing or vibrate; to cause to move backward and forward, or from one side to the other. [1913 Webster] He swings his tail, and swiftly turns his round. Dryden. [1913 Webster] They get on ropes, as you must have seen… …   The Collaborative International Dictionary of English

  • Swing — Swing, v. i. [imp. & p. p. {Swung}; Archaic imp. {Swang}; p. pr. & vb. n. {Swinging}.] [OE. swingen, AS. swingan to scourge, to fly, to flutter; akin to G. schwingen to winnow, to swingle, oscillate, sich schwingen to leap, to soar, OHG. swingan… …   The Collaborative International Dictionary of English

  • swing — vb 1 Swing, wave, flourish, brandish, shake, thrash are comparable when they mean to wield or to handle something so that it moves alternately backward and forward or upward and downward or around and around. Swing often implies regular… …   New Dictionary of Synonyms

  • Swing-by — auch: Swing|by 〈[ baı] n. 15; Raumf.〉 = Fly by [<engl. swing by „kurz vorbeischauen“] * * * Swing by   [ baɪ, englisch], Raumfahrt: das Fly by. * * * Swịng by [... baɪ], das; s, s [engl. swing by, eigtl. = das Vorüberschwingen] (Raumf.): ↑ …   Universal-Lexikon


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»