
- •JAVA-ТЕХНОЛОГИЯ
- •Swing
- •Связь Swing и AWT и различия между ними
- •Пример: панели со вкладками в Swing (слайд 1 / 4 )
- •Пример: панели со вкладками в Swing (слайд 2 / 4)
- •Пример: панели со вкладками в Swing (слайд 3 / 4)
- •Пример: панели со вкладками в Swing (слайд 4 / 4)
- •Визуальный образ (SPARC/ Solaris, .tiff)
- •Комментарии к примеру панели со вкладками
- •Комментарии к примеру (продолжение)
- •Pluggable Look-and-Feel: пример (Swing demo из JDK)
- •Pluggable Look-and-Feel: принципы и комментарии к примеру
- •Pluggable Look-and-Feel API (javax.swing.plaf.*)
- •Некоторые полезные Swing-
- •Шаблон проектирования MVC и Swing
- •Пример: HelloWorld на Swing
- •Пример HelloWorld: Результат
- •HelloWorld на Swing: Комментарии к примеру
- •Принципы проектирования Java Look-and-Feel (1 / 2)
- •Принципы проектирования Java Look-and-Feel (2 / 2)
- •Пример использования окон (MetalEdit)
- •Дизайн диалоговых окон (Dialog Boxes)
- •Дизайн иерархических структур (JTree)
- •Swing Look-and-Feels:
- •Ocean Look-and-Feel (Java 1.5): реализован как тема для Metal (javax.swing.plaf.OceanTheme)
- •Пакеты, входящие в состав Swing
- •Развитие GUI-технологий в Java

JAVA-ТЕХНОЛОГИЯ
Сафонов Владимир Олегович
Профессор кафедры информатики, руководитель лаборатории Java- технологии (http://polyhimnie.math.spbu.ru/jtl)
Email: vosafonov@gmail.com
Лекция 11

Swing
Swing – инструментарий более высокого уровня, значительно более удобный, чем AWT, для поддержки создания GUI
Swing является частью библиотеки Java Foundation Classes (JFC), включающей также Java2D и DnD (Drag-and-Drop)
Все компоненты Swing (в отличие от AWT) реализованы полностью на Java (lightweight components)
Дополнительные возможности Swing, по сравнению с AWT:
-панели со вкладками, панели прокрутки, деревья, таблицы и др.
-несколько стилей изображений GUI-компонент (Metal, Motif, Windows, Windows XP, GTK, Java 1.5: Ocean), с возможностью динамического изменения стиля и определения собственного стиля (Pluggable Look-and- Feel – PLAF)
-гораздо более широкие возможности компонент, аналогичных компонентам AWT (например, кнопка javax.swing.JButton, по сравнению с java.awt.Button)
-все компоненты Swing являются Java Beans
-средства редактирования и анализа (parsing) HTML-текстов
-средства создания редакторов текстов в форматах RTF и HTML
(C)В.О. Сафонов.
2013

Связь Swing и AWT и различия между ними
Swing реализован “поверх” AWT и использует классы компонент и событий AWT
Как правило, для управления компонентами Swing используются события и слушатели событий AWT; Swing добавляет новые события, соответствующие своим новым компонентам
В отличие от AWT, два базовых класса Swing – JFrame (фрейм) и JApplet (апплет), требуют для вставки и размещения их подкомпонент обращения к панели содержания (ContentPane),
например:
java.awt.Frame f; … f.add(aChild); но:
javax.swing.JFrame jf; … jf.getContentPane().add(aChild);
(в более новой версии Swing использование панели содержания уже не обязательно – 2010)
(C) В.О. Сафонов. 2013

Пример: панели со вкладками в Swing (слайд 1 / 4 )
import javax.swing.*;
// класс TLanguagePanel: структура панели public class TLanguagePanel extends JPanel {
private JTabbedPane p;
private JPanel makePane(String s)
{ // служебный метод: создать панель с меткой JPanel jp = new JPanel(); jp.setBackground(java.awt.SystemColor.control);
// цвет фона для элементов управления jp.add(new JLabel(s));
return jp;
}// makePane
(C)В.О. Сафонов.
2013

Пример: панели со вкладками в Swing (слайд 2 / 4)
public TLanguagePanel()
{// конструктор класса TLanguagePanel setLayout (new java.awt.BorderLayout()); p = new JTabbedPane();
p.addTab("Pascal", makePane("My first language"));
p.addTab("C#", makePane("My Microsoft language"));
p.addTab("Java", makePane("My favourite language"));
p.setSelectedIndex(2);
add (p, java.awt.BorderLayout.CENTER) ;
}
} // TLanguagePanel
(C) В.О. Сафонов. 2013

Пример: панели со вкладками в Swing (слайд 3 / 4)
import java.awt.event.*; import javax.swing.*;
// Класс TPanelRun – фрейм для запуска панели public class TPanelRun extends JFrame {
public TPanelRun() { super("Choose your language");
JPanel p = new TLanguagePanel(); setContentPane(p);
}
(C) В.О. Сафонов. 2013

Пример: панели со вкладками в Swing (слайд 4 / 4)
public static void main(String[] args) { JFrame f = new TPanelRun(); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e)
{System.exit(0);}
});
f.pack(); // установка размера, подходящего // для размещения компонент
f.setVisible(true);
}
} // TPanelRun
(C) В.О. Сафонов. 2013

Визуальный образ (SPARC/ Solaris, .tiff)
(C) В.О. Сафонов. 2013

Комментарии к примеру панели со вкладками
Определены два класса:
-TLanguagePanel – структура панели
-TPanelRun – создание фрейма верхнего уровня для визуализация панели.
Такая архитектура позволяет выделить процесс формирования панели (add…) в отдельный класс, а
затем установить уже готовую панель в качестве панели содержания фрейма (setContentPane)
Служебный метод makePane класса TLanguagePanel используется для создания одной вкладки в виде
панели Swing (JPanel), в которую (с выравниванием по
центру) вставляется метка (JLabel) с заданной
надписью. Цвет фона вкладки устанавливается равным цвету фона элемента управления AWT
Метод addTab класса JTabbedPane (панель со
(C)В.вкладками)О. Сафонов. добавляет новую вкладку
2013

Комментарии к примеру (продолжение)
Конструктор класса TPanelRun создает TLanguagePanel и устанавливает ее в качестве панели содержания фрейма
Фрейм (для простоты примера) обрабатывает единственное событие – закрытие окна через пункт меню “Close” (Alt/F4). В отличие от AWT, никаких дополнительных вызовов для связи с native-окном не требуется
Метод pack унаследован от класса Window. Он обеспечивает установку начальных размеров фрейма,
достаточных для размещения его подкомпонент, в соответствии с их начальными размерами (preferred size).
Как и для компоненты AWT, визуализация компоненты
(C) В.SwingО. Сафоноввыполняется. вызовом метода
2013f.setVisible(true).