Литературная библиотека
- 1 year ago
- 0
- 0
Swing — библиотека для создания графического интерфейса на языке Java . ПО было разработано компанией Sun Microsystems . Оно содержит ряд графических компонентов ( англ. Swing widgets ), таких как кнопки, поля ввода, таблицы и т. д.
Swing относится к классу JFC , который представляет собой набор библиотек для разработки графических оболочек . Поддерживаются Java 2D , , Drag & Drop -API и AWT .
Начиная с версии Java 1.2, Swing включён в Java Runtime Environment .
Архитектура Swing позволяет корректировать (L&F) вашего приложения. Look определяет внешний вид компонентов, а «Feel» — их поведение. Sun’s JRE предоставляет следующие L&F :
Swing предоставляет собой более гибкие интерфейс компоненты, чем библиотека AWT. Компоненты Swing созданы для одинаковой кроссплатформенной работы. AWT, в свою очередь, повторяет интерфейс исполняемой платформы, используя стандартные элементы ОС для отображения. То есть, для каждого элемента создается отдельный объект ОС (окно), из-за чего AWT не позволяет создавать элементы произвольной формы (возможно только использование прямоугольных компонентов), элементы управления на основе библиотеки всегда отображаются поверх Swing-элементов (так как все Swing-компоненты отображаются на поверхности контейнера).
Компоненты Swing поддерживают специфические динамически ( англ. plugable look-and-feel ), благодаря которому возможна адаптация к графическому интерфейсу платформы (то есть к компоненту можно динамически подключить другой, специфический для операционной системы, в том числе и созданный программистом вид и поведение). Таким образом, приложения, использующие Swing, могут выглядеть как родные приложения для данной операционной системы. Основным минусом таких «легковесных» ( англ. Lightweight ) компонентов является относительно медленная работа. Положительная сторона — универсальность интерфейса созданных приложений на всех платформах.
«Lightweight» означает, что компоненты Swing обрисовываются самими компонентами на поверхности родительского окна, без использования компонентов
операционной системы
. В отличие от «тяжёлых» компонентов AWT, в приложении Swing может иметься только одно окно, и все прочие компоненты обрисовываются на ближайшем родителе, имеющем собственное окно (например, на JFrame). В приложении могут сочетаться Swing- и AWT-элементы, хотя это может порождать некоторые проблемы — в частности, компоненты AWT всегда перекрывают Swing-элементы, а также закрывают собой всплывающие меню JPopupMenu и JComboBox. Для предотвращения этого у этих компонентов имеются методы
setLightWeightPopupEnabled(boolean)
, позволяющие запретить использование «легковесных» всплывающих элементов. При установке свойства в true (
setLightWeightPopupEnabled(true)
) AWT-элементы не будут перекрывать меню.
|
Этот раздел статьи
ещё
не написан
.
|
«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
}