Лекция 5 (Swing).ppt
- Количество слайдов: 42
Язык программирования JAVA Создание пользовательского интерфейса
AWT, JFC, Swing n AWT – abstract window toolkit (java. awt) ¡ ¡ n Swing (javax. swing) ¡ ¡ n Библиотека для реализации графического пользовательского интерфейса Предшественник Swing Более мощная графическая библиотека Построена на основе AWT JFC – java foundation classes ¡ ¡ Набор API, включающий AWT, Swing, Pluggable Look and Feel, Accessibility API Java 2 D, Drag and Drop
Иерархия графических компонентов n Общие контейнеры ¡ ¡ ¡ n Вложенные контейнеры ¡ ¡ n Frame Dialog Applet Panel Scroll Pane JSplit. Pane JTool. Bar Компоненты ¡ ¡ ¡ JText. Field JButton. . .
Общие контейнеры n С Swing поставляются следующие контейнеры: JFrame, JDialog, JApplet ¡ ¡ Content. Pane – для добавления элементов Рамка (set. Border) Заголовок (set. Title) Элементы обрамления (кнопки в заголовке окна)
Вложенные контейнеры n n Предназначены для группировки компонент или других контейнеров Типы контейнеров ¡ ¡ ¡ JPanel – группировка контейнеров или компонент JScroll. Pane – для добавления полос прокрутки к расширяемым компонентам JSplit. Pane – для отображения двух компонент в изменяемых областях JTool. Bar – для группировки компонент (кнопок), может быть передвинут пользователем JTabbed. Pane – для отображения закладок JInternal. Frame – для отображения внутренних окошек
Компоненты n n JButton JCheck. Box JText. Field. . .
Создание окон приложения n n n Создать наследника класса JFrame Определить конструктор В основном приложении ¡ ¡ Создать экземпляр нового класса Вызвать метод set. Visible()
Использование JFrame или JDialog n JFrame – обычное окно приложения ¡ ¡ ¡ n Свойства для установки иконок, заголовка, элементов обрамления. Есть content. Pane, который занимает всю область Методы set. Size() и set. Visible() JDialog обычно используется как модальное окно ¡ Метод set. Modal()
Создание окон приложения package sample. ui; import javax. swing. JFrame; public class Main. Frame extends JFrame { public Main. Frame() { super(); this. set. Title("Main. Frame"); this. set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE); this. set. Size(300, 300); } public static void main (String[] args){ Main. Frame mf = new Main. Frame(); mf. set. Visible(true); } }
Content Pane n n n Контейнер основного окна, в который добавляются остальные контейнеры и компоненты Класс контейнера java. awt. Container Получить экземпляр контейнера можно, вызвав метод get. Content. Pane()
Создание и добавление компонент n Компоненты добавляются в контейнер при помощи метода add() n В контейнер может быть добавлен ещё один контейнер Добавляются ЭКЗЕМПЛЯРЫ компонент n
Использование JPanel n n n Контейнер общего назначения Может использовать любой менеджер компоновки Можно добавлять компоненты, используя метод add() JPanel my. Panel = new JPanel(new Border. Layout()); JText. Area j. Text = new JText. Area(); my. Panel. set. Border(Border. Factory. create. Raised. Bevel. Border()); my. Panel. add(j. Text, Border. Layout. SOUTH);
Кнопки n n n Класс JButton При создании кнопки можно указать надпись на ней Можно добавлять картинки (иконки)
Создание и добавление компонент package sample. ui; import java. awt. Border. Layout; import javax. swing. JButton; import javax. swing. JFrame; import javax. swing. JPanel; public class Main. Frame extends JFrame { private JPanel main. Panel = new JPanel(); private JButton jb 1 = new JButton("First Button"); private JButton jb 2 = new JButton("Second Button"); public Main. Frame() { super(); this. set. Title("Main. Frame"); this. set. Default. Close. Operation (JFrame. EXIT_ON_CLOSE); this. set. Size(300, 300); main. Panel. add(jb 1); main. Panel. add(jb 2); main. Panel. set. Background(Color. BLACK); this. get. Content. Pane(). add(main. Panel, Border. Layout. SOUTH); } public static void main (String[] args){ Main. Frame mf = new Main. Frame(); mf. set. Visible(true); } }
Элементы для работы с текстом n n n JText. Field JPassword. Field JText. Area JEditor. Pane JText. Pane ¡ Для текстовых элементов существуют методы get. Text() и set. Text()
Размеры элементов n Для установки размеров элементов используются методы: ¡ ¡ n set. Size – устанавливает абсолютные размеры элементов set. Preferred. Size, set. Maximum. Size, set. Minimum. Size – устанавливают размеры элементов в зависимости от компоновки Класс Dimension – позволяет хранить размеры элементов
Менеджеры компоновки
Border. Layout n n Пять областей: North, South, West, East, Center расширяется до всего свободного пространства Только один компонент на одной области Обычно области используются для других контейнеров
Использование менеджеров компоновки n n Создать контейнер Создать менеджер компоновки Вызвать метод set. Layout() у контейнера Добавить элементы
Использование менеджеров компоновки (Border. Layout) package sample. ui; import java. awt. Border. Layout; import javax. swing. JButton; import javax. swing. JFrame; public class Main. Frame extends JFrame { public Main. Frame() { super(); this. set. Title("Border. Layout"); this. get. Content. Pane(). add(new JButton("North Button"), Border. Layout. NORTH); this. get. Content. Pane(). add(new JButton("South Button"), Border. Layout. SOUTH); this. get. Content. Pane(). add(new JButton("East Button"), Border. Layout. EAST); this. get. Content. Pane(). add(new JButton("Center Button")); this. set. Size(400, 300); } public static void main(String[] args) { Main. Frame mf = new Main. Frame(); mf. set. Visible(true); } }
Grid. Layout n n n Основан на сетке Каждый компонент может располагаться на одной ячейке Столбцы и строки имеют одинаковые размеры В конструкторе можно задать количество строк, столбцов, расстояние по горизонтали и вертикали Количество столбцов вычисляется как ¡ количество строк / количество элементов
Использование менеджеров компоновки (Grid. Layout) package sample. ui; import java. awt. Border. Layout; import java. awt. Container; import java. awt. Grid. Layout; import javax. swing. JButton; import javax. swing. JFrame; public class Main. Frame extends JFrame { public Main. Frame() { super(); this. set. Title("Grid. Layout"); this. set. Default. Close. Operation (EXIT_ON_CLOSE); Container c = this. get. Content. Pane(); c. set. Layout(new Grid. Layout(2, 2, 10)); c. add(new JButton("First Button")); c. add(new JButton("Second Button")); c. add(new JButton("Third Button")); c. add(new JButton("Fourth Button")); c. add(new JButton("Fifth Button")); this. set. Size(400, 300); } public static void main(String[] args) { Main. Frame mf = new Main. Frame(); mf. set. Visible(true); } }
Box. Layout n Располагает компоненты по вертикали или горизонтали (Box. Layout. Y_AXIS, Box. Layout. X_AXIS) n Между элементами можно вставлять распорки (struts) или заполнители (glues) ¡ ¡ Box. create. Glue(); Box. create. Vertical. Strut(int);
Использование менеджеров компоновки (Box. Layout) package sample. ui; import java. awt. Container; import javax. swing. Box. Layout; import javax. swing. JButton; import javax. swing. JFrame; public class Main. Frame extends JFrame { public Main. Frame() { super(); this. set. Title("Box. Layout"); this. set. Default. Close. Operation (EXIT_ON_CLOSE); Container c = this. get. Content. Pane(); c. set. Layout(new Box. Layout(c, Box. Layout. Y_AXIS)); c. add(Box. create. Vertical. Glue()); c. add(new JButton("First Button")); c. add(Box. create. Vertical. Strut(10)); c. add(new JButton("Second Button")); c. add(Box. create. Vertical. Glue()); this. set. Size(200, 300); } public static void main(String[] args) { Main. Frame mf = new Main. Frame(); mf. set. Visible(true); } }
Компонент JScroll. Pane n n n Предоставляет для компонент возможность прокрутки Компонент, помещаемый на JScroll. Pane - клиент JScroll. Pane автоматически обрабатывает события прокрутки и перерисовывает клиента
Компонент JScroll. Pane n n Предоставляет «окно» JView. Port для клиента Также есть возможность управлениея декорацией окна (заголовком окна, углами компонента)
Компонент JScroll. Pane import javax. swing. *; public class Scroll. Pane. Demo extends JFrame{ private JPanel jp; private JButton jb = new JButton("Push me!"); private JScroll. Pane js; public Scroll. Pane. Demo(){ super("Scroll. Pane Demo"); this. set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE ); this. set. Size(200, 250); jb. set. Alignment. X(JComponent. CENTER_ALIGNMENT ); jp = new JPanel(); jp. set. Layout(new Box. Layout(jp, Box. Layout. Y_AXIS)); jp. add(jb); js = new JScroll. Pane(new JText. Area(10, 10)); jp. add(js); this. get. Content. Pane(). add(jp ); } public static void main(String[] args) { Scroll. Pane. Demo spd = new Scroll. Pane. Demo(); spd. set. Visible(true); }}
Модель обработки событий n Как работает ¡ ¡ ¡ n Событие генерируется источником и создает объектсобытие Прослушиватель событий слушает определенные события Обработчик определяет, что нужно сделать Как сделать ¡ ¡ ¡ Создать источник события Создать прослушиватель-обработчик с методами обработки Зарегистрировать прослушиватель в источнике
Action. Listener n n Интерфейс, предназначенный для создания классов для обработки любого события объекта action. Performed(Action. Event arg 0) class My. Frame extends JFrame{ private JButton start. Button = new JButton(“Start!”); . . . start. Button. add. Action. Listener(new Start. Listener()) class Start. Listener implements Action. Listener{ public void action. Performed(Action. Event arg 0) { my. Object. start(); } } }
Listeners и Adapters n n Listener – интерфейс, в котором описаны методы для реализации событий Adapter – класс, который реализует Listener интерфейс, но его методы пустые
Listeners и Adapters n n n Mouse – отслеживает события мыши (нажатие, отжатие) Key – отслеживает события клавиатуры (нажатие, отжатие кнопки) Container – отслеживает события контейнера (добавление элемента) Item – отслеживает события на уровне элемента (изменение состояния) Window – отслеживает события на уровне окна (открытие, закрытие)
Модель обработки событий JButton jb = new JButton(); jb. add. Mouse. Listener(new Button. Handler()); . . . class Button. Handler implements Mouse. Listener{. . . public void mouse. Pressed(Mouse. Event arg 0) { try { UIManager. set. Look. And. Feel("com. sun. java. swing. plaf. motif. Motif. Look. And. Feel“); } catch (Exception e) { } Swing. Utilities. update. Component. Tree. UI(Main. Frame. this. get. Content. Pane()); } }
Компонент JTable n n n Компонент предназначен для отображения данных в табличном виде Обычно размещается на JScroll. Pane Реализует шаблон MVC (Model-View -Controller)
Компонент JTable import import public } java. awt. Border. Layout; javax. swing. JFrame; javax. swing. JPanel; javax. swing. JScroll. Pane; javax. swing. JTable; class Table. Demo extends JFrame{ private JScroll. Pane js; private JTable jt; private JPanel jp; public Table. Demo(){ super(); this. set. Size(300, 200); this. set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE ); this. jp = new JPanel(new Border. Layout()); js = new JScroll. Pane(new JTable(1000, 5)); jp. add(js); this. get. Content. Pane(). add(jp ); } public static void main(String[] args) { Table. Demo td = new Table. Demo(); td. set. Visible(true); }
Компонент JTable import java. awt. Border. Layout; import javax. swing. *; public class Data. Table. Demo extends JFrame { private JScroll. Pane js; private JTable jt; private JPanel jp; private String[] col. Headers = {"Фамилия", "Имя", "Отчество", "Курс", "Группа"}; private Object[][] data = { {"Иванов", "Петр", "Иванович", new Integer(1), new Integer(2)}, {"Integer", "Real", "Double'вич", new Integer(2), new Integer(1)}, {"Игнатова", "Мария", "Васильевна", new Integer(3), new Integer(4)}, }; public Data. Table. Demo(){ super("Data. Table. Demo"); this. set. Size(300, 200); this. set. Default. Close. Operation(JFrame. EXIT_ON_CLOSE ); this. jp = new JPanel(new Border. Layout()); js = new JScroll. Pane(new JTable(data, col. Headers)); jp. add(js); this. get. Content. Pane(). add(jp ); } public static void main(String[] args) { Data. Table. Demo td = new Data. Table. Demo(); td. set. Visible(true);
Компонент JTable n n Помимо явного задания данных для JTable можно задавать модель таблицы Табличная модель играет роль модели данных Table. Model JTable Хранит данные Отображает данные
Компонент JTable n n В качестве исходной модели данных при создании таблицы берется класс Default. Table. Model Для реализации своей модели данных необходимо создать класс, наследующийся от Abstract. Table. Model
Модель данных n n n get. Column. Count() get. Row. Count() get. Value. At() get. Column. Name() set. Value. At() is. Cell. Editable()
Редакторы ячеек n n n JTable позволяет использовать в качестве редакторов значений ячеек любой элемент Swing Для установки редактора ячейки можно использовать класс Column. Model и Default. Cell. Editor Для создания собственного редактора необходимо реализовать интерфейс Table. Cell. Editor или унаследовать класс от Abstract. Cell. Editor
Редакторы ячеек . . . jt = new JTable(jtdm); jt. get. Column. Model(). get. Column(0). set. Cell. Editor(new Default. Cell. Editor(new JText. Field())); JCombo. Box jcmb = jcmb. add. Item(new JCombo. Box(); Integer(1)); Integer(2)); Integer(3)); Integer(4)); Integer(5)); jt. get. Column. Model(). get. Column(3). set. Cell. Editor(new Default. Cell. Editor(jcmb)); jt. get. Column. Model(). get. Column(4). set. Cell. Editor(new Default. Cell. Editor(jcmb)); . . .
Изменение внешнего вида n n Swing поддерживает изменение внешнего вида окон «на лету» Используется класс javax. swing. UIManager public void mouse. Pressed(Mouse. Event arg 0) { try{ UIManager. set. Look. And. Feel("com. sun. java. swing. plaf. motif. Motif. Look. And. Feel"); } catch (Exception e) {} Swing. Utilities. update. Component. Tree. UI(Main. Frame. this. get. Content. Pane()); }
Вопросы? http: //java. sun. com/docs/books/tutorial/uiswing/ http: //java. sun. com/docs/books/tutorial/2 d/index. html


