6. JavaLecture_Swing.ppt
- Количество слайдов: 66
Разработка GUI на Java - библиотека AWT (Abstract Window Toolkit) пакет java. awt. * - библиотека JFC (Java Foundation Classes) пакет javax. swing. * Frame (AWT) – JFrame (Swing) Button (AWT) – JButton (Swing) … 1
Классы для создания GUI 2
Класс Component (абстрактный) Ox Oy Dimension get. Size() Возвращает размеры компонента set. Bounds (int x, int y, int width, int height) Устанавливает размеры компонента int get. Width() int get. Height() Ширина компонента Высота компонента is. Enabled() set. Enabled(boolean b) Проверка доступности Установка доступности is. Visible() set. Visible(boolean b) Проверка видимости Установка видимости 3
Класс Container cont 1 Component c 2 Component c 3 Добавление компонента к контейнеру: Component add (Component c) Container является невидимым компонентом. Все класс окон унаследованы от класса Container. 4
Классы окон. JFrame import java. awt. *; import javax. swing. *; class Test {public static void main(String args[ ]) {JFrame jf = new JFrame("Hello, World!"); jf. set. Bounds (100, 300, 200); jf. set. Visible(true); } } 5
Классы окон. JWindow import java. awt. *; import javax. swing. *; class Test {public static void main(String args[ ]) {JFrame jf = new JFrame("Hello, World!"); jf. set. Bounds (100, 300, 200); jf. set. Visible(true); JWindow jw = new JWindow (jf); jw. set. Bounds (400, 500, 200); jw. show(); } } 6
Классы окон. JDialog import java. awt. *; import javax. swing. *; class Test {public static void main(String args[ ]) {JFrame jf = new JFrame("Hello, World!"); jf. set. Bounds (100, 300, 200); jf. set. Visible(true); JDialog jd = new JDialog(jf, "Simple Dialog", true); jd. set. Bounds (300, 400, 400); jd. set. Visible(true); } } 7
Классы окон. JFile. Chooser import java. awt. *; import javax. swing. *; class Test {public static void main(String args[ ]) {JFile. Chooser chooser = new JFile. Chooser(); int ret = chooser. show. Open. Dialog(null); if(ret == JFile. Chooser. APPROVE_OPTION) {System. out. println("You've chosen to open this file: " + chooser. get. Selected. File(). get. Name()); } } } 8
Графический контекст При создании компонента автоматически формируется его графический контекст (graphics context). Контекст содержит текущий и альтернативный цвет рисования и цвет фона, текущий шрифт для вывода текста, систему координат. Управляет контекстом класс Graphics. Т. к. графический контекст сильно зависит от конкретной графической платформы, этот класс является абстрактным. Каждая JVM реализует методы этих классов, создает их экземпляры для компонента. Получить ссылку на созданный графический контекст можно с помощью метода Graphics get. Graphics(). 9
Графический контекст. Методы draw. Line (int x 1, int y 1, Линия из (x 1, y 1) в (x 2, y 2) int x 2, int y 2) draw. Rect (int x, int y, int width, int height) Прямоугольник: левый верхний угол (x, y), ширина width, высота height draw 3 DRect (int x, int y, int width, int height, boolean raised) 3 D-прямоугольник: rasied = true – «выпуклый» raised = false – «вдавленный» draw. Oval (int x, int y, int width, int height) Овал, вписанный в прямоугольник, заданный аргументами метода draw. Arc (int x, int y, int width, int height, int start. Angle, int arc) Дуга овала, вписанного в прямоугольник. Величина дуги arc градусов. Отсчитывается от start. Angle. Угол отсчитывается в градусах от оси Ox. Положительный угол - против часовой стрелки, отрицательный – по часовой стрелке. 10
Графический контекст. Методы draw. Round. Rect (int x, int y, int width, int height, int ar-c. Width, int arc. Height) Прямоугольник с закругленными краями. Закругления вычерчиваются четвертинками овалов, вписанных в прямоугольники шириной arc. Width и высотой arc. Height, построенные в углах основного прямоугольника. draw. Polyline (int x. Points[ ], int y. Points[ ], int n. Points) Чертит ломаную линию с вершинами в точках (x. Points[i], y. Points[i]) и числом вершин n. Points draw. Polygon(int x. Points[ ], int y. Points[ ], int n. Points) Чертит замкнутую ломаную с вершинами в точках (x. Points[i], y. Points[i]) и числом вершин n. Points fill. Rect(int x, int y, int width, int height) Эти методы аналогичны соответствующим методам draw…(), но в отличие от них вычерчивают фигуры, залитые текущим цветом fill. Oval(int x, int y, int width, int height) и т. д. 11
Графический контекст. Методы draw. String (String s, int x, int y) Выводит строку s. Вывод начинается с позиции (x, y). draw. Bytes (byte b[ ], int offset, int length, int x, int y) Выводит length элементов массива b, начиная с ин-декса offset. Вывод начинается с позиции (x, y). draw. Chars (char ch[ ], int offset, int length, int x, int y) Выводит length элементов массива ch, начиная с индекса offset. Вывод начинается с позиции (x, y). 12
Графический контекст. Работа с цветом Color (int red, int green, int blue) 0 -255 Color (float red, float green, float blue) 0. 0 -1. 0 Color (int rgb) 23 15 0. 0 -1. 0 7 0 Color(int r, int g, int b, int a) Прозрачность: 0 - полная, 255 – отсутств. 13
Графический контекст. Работа с цветом Цветовые константы: Color. black Color. blue Color. cyan Color. dark. Gray Color. green, Color. light. Gray Color. magenta Color. orange Color. pink Color. red Color. white, Color. yellow 14
Графический контекст. Класс Polygon(int x. Points[ ], int y. Points[ ], int n. Points) Создается многоугольник с вершинами (x. Points[i], y. Points[i]). Число вершин – n. Points. 15
Графический контекст. Класс Polygon boolean contains Проверяет, лежит ли точка (x, y) внутри (double x, double y) многоугольника boolean contains Проверяет, лежит ли прямоугольник, заданный (double x, double y, аргументами метода внутри многоугольника double w, double h) boolean contains (int x, int y) Проверяет, лежит ли точка (x, y) внутри многоугольника boolean contains (Point p) Проверяет, лежит ли точка (x, y) внутри многоугольника boolean intersects Проверяет, пересекается ли прямоугольник, (double x, double y, заданный аргументами метода с double w, double h) многоугольником 16
Графический контекст. Элементы управления • Текстовые метки • Кнопки • Флажки • «Радиопереключатели» • Списки • Поля со списком • Текстовые поля • Панели прокрутки • Панели с вкладками • Деревья • Текстовые области • Таблицы Добавление компонента к контейнеру: Component add (Component c) Удаление компонента из контейнера: void remove (Component obj). 17
Графический контекст. Элементы управления В библиотеке Swing компоненты перед выводом на экран должны быть помещены не в окно, а внутрь специального контейнера, который называется панель содержания (content pane). Этот контейнер не нужно создавать, его можно получить для окна подобно графическому контексту: JFrame f = new JFrame("Test"); Container cp = f. get. Content. Pane(); После этого все операции добавления/удаления компонентов выполняются для панели содержания, а не для самого окна. 18
Графический контекст. Элементы управления Графические изображения Конструктор класса Image. Icon: Image. Icon(String filename) Основные методы класса Image. Icon: int get. Icon. Height() int get. Icon. Width() void paint. Icon(Component comp, Graphics g, int x, int y) 19
Графический контекст. Элементы управления Текстовые метки JLabel (String str) JLabel (Icon id_icon) JLabel (String str, Icon id_icon, int align) JLabel. LEFT - выравнивание по левому краю JLabel. RIGHT - выравнивание по правому краю JLabel. CENTER - выравнивание по центру void set. Text(String str) String get. Text( ) void set. Alignment(int align) int get. Alignment( ) void set. Icon(Icon id_icon) Icon get. Icon( ) 20
Графический контекст. Элементы управления Управляющие кнопки JButton(String str) JButton(Icon id_icon) Методы, позволяющие управлять видом кнопки: String get. Label( ) void set. Label(String str) Icon get. Label( ) void set. Icon(Icon id_icon) 21
Графический контекст. Элементы управления Флажки - переключатели JCheck. Box (String str, Icon id_icon, boolean state) Управление состоянием флажка из программы осуществляется с помощью методов: boolean get. Selected() void set. Selected(boolean state) 22
Графический контекст. Элементы управления «Радио-переключатели» JRadio. Button (String str, Icon id_icon, boolean state) «Радиопереключатели» должны быть объединены в группу, в пределах которой будет обеспечиваться уникальность выбора элемента. Чтобы создать группу создается экземпляр объекта специального класса Button. Group. Далее все созданные радиопереключатели добавляются в созданную группу (что не отменяет необходимости их добавления к панели содержания). 23
Графический контекст. Элементы управления «Радио-переключатели» JFrame f = new JFrame("Radio. Button Example"); Container cp = f. get. Content. Pane(); JRadio. Button jrb 1 = new JRadio. Button("a", false); JRadio. Button jrb 2 = new JRadio. Button("b", false); JRadio. Button jrb 3 = new JRadio. Button("c", true); Button. Group bg = new Button. Group(); JButton jb = new JButton("OK"); bg. add(jrb 1); bg. add(jrb 2); bg. add(jrb 3); cp. add(jrb 1); cp. add(jrb 2); cp. add(jrb 3); cp. add(jb); f. set. Visible(true); 24
Графический контекст. Элементы управления «Радио-переключатели» 25
Графический контекст. Элементы управления Раскрывающиеся списки JCombo. Box() JCombo. Box(Vector v[ ]) JCombo. Box(Object obj[ ]) Добавление элемента в список: add. Item(Object item) Вставка элемента в список: insert. Item. At(Object an. Object, int index) Удаление элементов из списка: void remove. Item (String text) void remove. Item. At (int index) void Remove. All. Items () 26
Графический контекст. Элементы управления Раскрывающиеся списки Работа с выбранными элементами: String get. Selected. Item( ) void set. Selected. Item (Object obj) int get. Selected. Index( ) void set. Selected. Index (int index) Установка режима редактирования: void set. Editable (boolean state) 27
Графический контекст. Элементы управления Списки JList(Vector v[ ]) JList(Object obj[ ]) Объекты типа JList не поддерживают автоматическую прокрутку. Поэтому для того, чтобы элементы в списке могли прокручиваться, список необходимо поместить в специальный объект JScroll. Pane, а уже этот объект добавить в контейнер. 28
Графический контекст. Элементы управления Списки JFrame f = new JFrame(); Container cp = f. get. Content. Pane(); f. set. Bounds(100, 300, 300); String s[ ] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"}; JList jl = new JList(s); jl. set. Bounds(10, 30, 30); JScroll. Pane p = new JScroll. Pane(jl); cp. add(p); f. set. Visible(true); 29
Графический контекст. Элементы управления Списки 30
Графический контекст. Элементы управления Списки Для определения выбранного элемента (элементов) используются методы: Object get. Selected. Value() Object[ ] get. Selected. Values() int get. Selected. Index( ) int[ ] get. Selected. Indices( ) 31
Графический контекст. Элементы управления JText. Field( ) Текстовые поля JText. Field(int num. Chars) JText. Field(String str, int num. Chars) String get. Text() Возвращает строку, содержащуюся в поле ввода. void set. Text (String str) Устанавливает в поле ввода текст str. String get. Selected. Text() Возвращает выделенную часть текста. void select (int start, int end) Программное выделение части текста в поле ввода начиная с позиции start до позиции end. void set. Echo. Char(char ch) Для ввода паролей 32
Графический контекст. Элементы управления JText. Area( ) Текстовые области JText. Area(int num. Lines, int num. Chars) JText. Area(String str, int num. Lines, int num. Chars) void append (String str) Строка str добавляется к концу текущего текста void insert (String str, int index) Строка str вставляется в позицию, указанную в параметре index. void replace. Range (String str, int start, int end) Заменяет символы от start до end-1 строкой str. Для обеспечения прокрутки JText. Field и JText. Area должны быть помещены в контейнер JScroll. Pane. 33
Графический контекст. Элементы управления Другие элементы JTabbed. Pane – панель со вкладками JTree – деревья JTable – таблицы JSplit. Pane – «расщепленные» окна JSlider – ползунковый регулятор JProgress. Bar – индикатор прогресса 34
Менеджеры компоновки Размещение компонентов в окне с помощью set. Bounds() имеет множество недостатков: - необходимо вручную рассчитывать координаты - при изменении размеров окна, компоненты «поплывут» - теряется кроссплатформность Поэтому существуют менеджеры компоновки – средства автоматического размещения компонентов в окне 35
Менеджеры компоновки Layout. Manager Flow. Layout Border. Layout Grid. Layout Card. Layout Grid. Bag. Layout Менеджер компоновки устанавливается методом void set. Layout (Layout. Manager obj) 36
Менеджеры компоновки Flow. Layout – менеджер поточной компоновки. Он размещает компоненты в окне начиная от левого верхнего угла слева направо и сверху вниз. Конструкторы: Flow. Layout (int align, int h, int v) Flow. Layout (int align) Flow. Layout () Методы: void set. Alignment (int align) void set. Hgap (int hgap) void set. Vgap (int vgap) 37
Менеджеры компоновки Flow. Layout f. set. Layout(new Flow. Layout()); JRadio. Button jrb 1 = new JRadio. Button("a", false); JRadio. Button jrb 2 = new JRadio. Button("b", false); JRadio. Button jrb 3 = new JRadio. Button("c", true); JButton jb 1 = new JButton ("Yes"); JButton jb 2 = new JButton ("No"); JButton jb 3 = new JButton ("Cancel"); Button. Group bg = new Button. Group(); bg. add(jrb 1); bg. add(jrb 2); bg. add(jrb 3); cp. add(jb 1); cp. add(jb 2); cp. add(jb 3); cp. add(jrb 1); cp. add(jrb 2); cp. add(jrb 3); f. set. Visible(true); 38
Менеджеры компоновки Flow. Layout 39
Менеджеры компоновки Border. Layout North West Center East South Конструкторы класса Border. Layout: Border. Layout () Border. Layout (int horz, int vert) 40
Менеджеры компоновки Border. Layout Добавлять компоненты в этом случае можно с помощью специальной формы метода add(): void add (Component comp, Object region) где параметр region должен принимать одно из следующих значений: Border. Layout. NORTH Border. Layout. SOUTH Border. Layout. EAST Border. Layout. WEST Border. Layout. CENTER 41
Менеджеры компоновки Border. Layout JFrame f = new JFrame(); Container cp = f. get. Content. Pane(); // Создаем панель р2 с тремя кнопками Panel p 2 = new Panel(); p 2. add(new JButton(“Выполнить”)); p 2. add(new JButton(“Отменить")) ; p 2. add(new JButton(“Выйти")); // Создаем панель p 1 и устанавливаем для нее компоновку Border. Layout Panel p 1 = new Panel(); p 1. set. Layout(new Border. Layout()); 42
Менеджеры компоновки Border. Layout p 1. add (p 2, Border. Layout. SOUTH); p 1. add(new Text. Field( «Поле ввода» , 20), Border. Layout. NORTH); p 1. add(new Text. Area ( «Область ввода» , 5, 20, Text. Area. SCROLLBARS_NONE), Border. Layout. CENTER); cp. add (new Scrollbar (Scrollbar. HORIZONTAL), Border. Layout. SOUTH); cp. add(new Scrollbar(Scrollbar. VERTICAL), Border. Layout. EAST) ; cp. add(p 1, Border. Layout. CENTER) ; f. set. Visible(true); 43
Менеджеры компоновки Border. Layout 44
Менеджеры компоновки Grid. Layout Менеджер Grid. Layout размещает компоненты в двумерной сетке (иногда такое размещение называют табличным). Число строк и столбцов сетки следует задавать при создании экземпляра объекта Grid. Layout. Компоненты размещаются слева направо по строкам созданной таблицы в том порядке, в котором они заданы методом add(). Конструкторы, определенные в классе Grid. Layout: Grid. Layout() Grid. Layout(int num. Rows, int num. Columns, int horz, int vert) 45
Менеджеры компоновки Grid. Layout Внимание! Если число компонентов > числа клеток, то: - если num. Rows != 0 & num. Columns !=0 -> num. Columns игнорируется и число столбцов устанавливается так, чтобы уместились все компоненты - если num. Rows == 0 -> число строк устанавливается так, чтобы уместились все компоненты 46
Менеджеры компоновки Grid. Layout JFrame f = new JFrame(); Container cp = f. get. Content. Pane(); f. set. Layout(new Grid. Layout(3, 2)); f. add(new JButton("1")); f. add(new JButton("2")); f. add(new JButton("3")); f. add(new JButton("4")); f. add(new JButton("5")); f. add(new JButton("6")); f. add(new JButton("7")); f. add(new JButton("8")); f. add(new JButton("9")); f. set. Visible(true); 47
Менеджеры компоновки Grid. Layout 48
Менеджеры компоновки Card. Layout Менеджер Card. Layout показывает в контейнере только первый компонент. Остальные компоненты лежат под первым в определенном порядке как игральные карты в колоде. Их расположение определяется порядком вызова методов add(). cледующий компонент next(Container c) предыдущий previous(Container c) первый first(Container c) последний last(Container c) Аргумент этих методов – ссылка на контейнер, в который помещены компоненты, обычно this. 49
Менеджеры компоновки Card. Layout Конструкторы: Card. Layout() не отделяет компонент от границ контейнера Card. Layout(int hgap, int vgap) задает горизонтальные и вертикальные промежутки между компонентом и границами контейнера. Card. Layout позволяет организовать и произвольный доступ к компонентам. Метод add() для этого менеджера имеет вид add(Component comp, Object name) Показать нужный компонент с именем name можно с помощью метода show(Container parent, String name) 50
Менеджеры компоновки Card. Layout Panel p = new Panel(); Card. Layout c = new Card. Layout(); p. set. Layout(c); Panel p 1 = new Panel(); Panel p 2 = new Panel(); Panel p 3 = new Panel(); p. add(p 1, "1"); p. add(p 2, "2"); p. add(p 3, "3"); c. next(p); 51
VE – Visual Editor Разработка GUI c помощью визуального редактора VE – Visual Editor. Плагин для среды разработки Eclipse IDE. • Позволяет работать с графическими библиотеками Java Swing и Java AWT. • Упрощает работу с компонентами • Поддерживает менеджеры компоновки • Автоматическое добавление обработчиков (слушателей) событий. 52
VE – Visual Editor Установка Зайти в Eclipse – Help->Install New Software. Нажать кнопку Add и указать путь http: //visualeditor. sourceforge. net/updates/1. 5. 0 53
54
55
VE – Visual Editor Три представления • Design – как будет выглядеть окно • Source - исходный код • Palette - палитра графических элементов • Properties – просмотр и установка свойств компонента. • Java Beans – дерево вложенности компонентов 56
Design Palette Source Properties Java Beans 57
Visual Editor. Типовые операции. Открыть класс в редакторе Чтобы открыть существующий класс в визуальном редакторе: • Package Explorer - выберите исходный файл. java • Open With > Visual Editor из выпадающего меню. Создание нового визуального класса • File -> New -> Visual Class • Name - имя класса • Style – выбрать родительский класс: • JFrame • Japplet • …. . 58
59
Добавление компонентов и изменение их свойств • Добавление компонентов – путем перетаскивания с панели • Изменение Layout Manager – в контекстном меню панели окна или апплета – Customize Layout или Set Layout • Убрать менеджер компонентов set. Layout. Manager(null) – в коде В этом случае можно изменять размещение и размер компонентов вручную 60
Добавить надпись на компонент 61
Переупорядочивание компонентов 62
Изменение размеров компонентов 63
Добавление обработчиков событий 64
Добавление события 65
Выравнивание элементов
6. JavaLecture_Swing.ppt