Скачать презентацию Язык программирования JAVA Создание пользовательского интерфейса AWT Скачать презентацию Язык программирования JAVA Создание пользовательского интерфейса AWT

Лекция 5 (Swing).ppt

  • Количество слайдов: 42

Язык программирования JAVA Создание пользовательского интерфейса Язык программирования JAVA Создание пользовательского интерфейса

AWT, JFC, Swing n AWT – abstract window toolkit (java. awt) ¡ ¡ n 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 Общие контейнеры ¡ ¡ ¡ n Вложенные контейнеры ¡ ¡ n Frame Dialog Applet Panel Scroll Pane JSplit. Pane JTool. Bar Компоненты ¡ ¡ ¡ JText. Field JButton. . .

Общие контейнеры n С Swing поставляются следующие контейнеры: JFrame, JDialog, JApplet ¡ ¡ Content. Общие контейнеры n С Swing поставляются следующие контейнеры: JFrame, JDialog, JApplet ¡ ¡ Content. Pane – для добавления элементов Рамка (set. Border) Заголовок (set. Title) Элементы обрамления (кнопки в заголовке окна)

Вложенные контейнеры n n Предназначены для группировки компонент или других контейнеров Типы контейнеров ¡ Вложенные контейнеры n n Предназначены для группировки компонент или других контейнеров Типы контейнеров ¡ ¡ ¡ JPanel – группировка контейнеров или компонент JScroll. Pane – для добавления полос прокрутки к расширяемым компонентам JSplit. Pane – для отображения двух компонент в изменяемых областях JTool. Bar – для группировки компонент (кнопок), может быть передвинут пользователем JTabbed. Pane – для отображения закладок JInternal. Frame – для отображения внутренних окошек

Компоненты n n JButton JCheck. Box JText. Field. . . Компоненты n n JButton JCheck. Box JText. Field. . .

Создание окон приложения n n n Создать наследника класса JFrame Определить конструктор В основном Создание окон приложения n n n Создать наследника класса JFrame Определить конструктор В основном приложении ¡ ¡ Создать экземпляр нового класса Вызвать метод set. Visible()

Использование JFrame или JDialog n JFrame – обычное окно приложения ¡ ¡ ¡ n Использование 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 Создание окон приложения 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 Контейнер основного окна, в который добавляются остальные контейнеры и Content Pane n n n Контейнер основного окна, в который добавляются остальные контейнеры и компоненты Класс контейнера java. awt. Container Получить экземпляр контейнера можно, вызвав метод get. Content. Pane()

Создание и добавление компонент n Компоненты добавляются в контейнер при помощи метода add() n Создание и добавление компонент n Компоненты добавляются в контейнер при помощи метода add() n В контейнер может быть добавлен ещё один контейнер Добавляются ЭКЗЕМПЛЯРЫ компонент n

Использование JPanel n 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 При создании кнопки можно указать надпись на ней Кнопки n n n Класс JButton При создании кнопки можно указать надпись на ней Можно добавлять картинки (иконки)

Создание и добавление компонент package sample. ui; import java. awt. Border. Layout; import javax. Создание и добавление компонент 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 Элементы для работы с текстом n n n JText. Field JPassword. Field JText. Area JEditor. Pane JText. Pane ¡ Для текстовых элементов существуют методы get. Text() и set. Text()

Размеры элементов n Для установки размеров элементов используются методы: ¡ ¡ n set. Size Размеры элементов n Для установки размеров элементов используются методы: ¡ ¡ n set. Size – устанавливает абсолютные размеры элементов set. Preferred. Size, set. Maximum. Size, set. Minimum. Size – устанавливают размеры элементов в зависимости от компоновки Класс Dimension – позволяет хранить размеры элементов

Менеджеры компоновки Менеджеры компоновки

Border. Layout n n Пять областей: North, South, West, East, Center расширяется до всего Border. Layout n n Пять областей: North, South, West, East, Center расширяется до всего свободного пространства Только один компонент на одной области Обычно области используются для других контейнеров

Использование менеджеров компоновки n n Создать контейнер Создать менеджер компоновки Вызвать метод set. Layout() Использование менеджеров компоновки n n Создать контейнер Создать менеджер компоновки Вызвать метод set. Layout() у контейнера Добавить элементы

Использование менеджеров компоновки (Border. Layout) package sample. ui; import java. awt. Border. Layout; import Использование менеджеров компоновки (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 n n n Основан на сетке Каждый компонент может располагаться на одной ячейке Столбцы и строки имеют одинаковые размеры В конструкторе можно задать количество строк, столбцов, расстояние по горизонтали и вертикали Количество столбцов вычисляется как ¡ количество строк / количество элементов

Использование менеджеров компоновки (Grid. Layout) package sample. ui; import java. awt. Border. Layout; import Использование менеджеров компоновки (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. 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. Использование менеджеров компоновки (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 n n n Предоставляет для компонент возможность прокрутки Компонент, помещаемый на JScroll. Pane - клиент JScroll. Pane автоматически обрабатывает события прокрутки и перерисовывает клиента

Компонент JScroll. Pane n n Предоставляет «окно» JView. Port для клиента Также есть возможность Компонент JScroll. Pane n n Предоставляет «окно» JView. Port для клиента Также есть возможность управлениея декорацией окна (заголовком окна, углами компонента)

Компонент JScroll. Pane import javax. swing. *; public class Scroll. Pane. Demo extends JFrame{ Компонент 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 Событие генерируется источником и Модель обработки событий n Как работает ¡ ¡ ¡ n Событие генерируется источником и создает объектсобытие Прослушиватель событий слушает определенные события Обработчик определяет, что нужно сделать Как сделать ¡ ¡ ¡ Создать источник события Создать прослушиватель-обработчик с методами обработки Зарегистрировать прослушиватель в источнике

Action. Listener 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 – интерфейс, в котором описаны методы для реализации Listeners и Adapters n n Listener – интерфейс, в котором описаны методы для реализации событий Adapter – класс, который реализует Listener интерфейс, но его методы пустые

Listeners и Adapters n n n Mouse – отслеживает события мыши (нажатие, отжатие) Key Listeners и Adapters n n n Mouse – отслеживает события мыши (нажатие, отжатие) Key – отслеживает события клавиатуры (нажатие, отжатие кнопки) Container – отслеживает события контейнера (добавление элемента) Item – отслеживает события на уровне элемента (изменение состояния) Window – отслеживает события на уровне окна (открытие, закрытие)

Модель обработки событий JButton jb = new JButton(); jb. add. Mouse. Listener(new Button. Handler()); Модель обработки событий 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 Компонент предназначен для отображения данных в табличном виде Обычно Компонент JTable n n n Компонент предназначен для отображения данных в табличном виде Обычно размещается на JScroll. Pane Реализует шаблон MVC (Model-View -Controller)

Компонент JTable import import public } java. awt. Border. Layout; javax. swing. JFrame; javax. Компонент 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. Компонент 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 можно задавать модель таблицы Компонент JTable n n Помимо явного задания данных для JTable можно задавать модель таблицы Табличная модель играет роль модели данных Table. Model JTable Хранит данные Отображает данные

Компонент JTable n n В качестве исходной модели данных при создании таблицы берется класс Компонент JTable n n В качестве исходной модели данных при создании таблицы берется класс Default. Table. Model Для реализации своей модели данных необходимо создать класс, наследующийся от Abstract. Table. Model

Модель данных n n n get. Column. Count() get. Row. Count() get. Value. At() Модель данных 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 позволяет использовать в качестве редакторов значений ячеек любой Редакторы ячеек 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. Редакторы ячеек . . . 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 поддерживает изменение внешнего вида окон «на лету» Используется Изменение внешнего вида 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 Вопросы? http: //java. sun. com/docs/books/tutorial/uiswing/ http: //java. sun. com/docs/books/tutorial/2 d/index. html