swing

57
SWING

Upload: obert

Post on 27-Jan-2016

52 views

Category:

Documents


1 download

DESCRIPTION

SWING. Графические библиотеки. AWT – платформозависимая, java.awt.* Swing – платформонезависимая, java.swing.* SWT – платформозависимая. Окна верхнего уровня. Окно приложения Класс JFrame Диалоговое окно Класс JDialog Окно апплета Класс JApplet Вложенное окно - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: SWING

SWING

Page 2: SWING

Графические библиотекиAWT – , платформозависимая java.awt.*Swing – , платформонезависимая

java.swing.*SWT – платформозависимая

Page 3: SWING

Окна верхнего уровня Окно приложения

Класс JFrame Диалоговое окно

Класс JDialog Окно апплета

Класс JApplet Вложенное окно

Класс JInternalFrame

Page 4: SWING

DemotestFrame.javatestFrame2.java

Page 5: SWING

Окна приложения Класс JFrameКонструкторы

JFrame(title)Свойства

title – заголовокjMenuBar – менюiconImage – иконка окна

Page 6: SWING

Закрытие окнаМетод

setDefaultCloseOperation(operation) – установить действие при закрытии окна

DO_NOTHING_ON_CLOSEHIDE_ON_CLOSE DISPOSE_ON_CLOSE EXIT_ON_CLOSE (JFrame)

Page 7: SWING

Стандартные диалоги Класс JOptionPaneМетоды

showConfirmDialog(…) – / /да нет отменаshowInputDialog(…) – ввод текстаshowMessageDialog(…) – информацияshowOptionDialog(…) – выбор из списка

ПараметрыparentComponent – родительскаякомпонента

message – сообщениеoptionType – набор кнопокmessageType – вид иконки

Page 8: SWING

Панель содержимогоМетоды

getXXXPane() – возвращает панельsetXXXPane() – устанавливает панель

getContentPane(), setContentPane()

Page 9: SWING

DemotestFrameButton

Page 10: SWING

Компоненты , Части интерфейса пользователя не

содержащие других компонентовJLabel – меткаJButton – кнопкаJMenuItem – элемент менюJTextArea – редактор текста

Page 11: SWING

Контейнеры , Части интерфейса пользователя содержащие другие

компонентыJPanel – панельJFrame – окно приложенияJDialog – диалоговое окноJSrollPane – область с полосой прокрутки

add(Component component) — добавляет в контейнер элемент component;

remove(Component component) — удаляет из контейнера элемент component;

removeAll() — ;удаляет все элементы контейнераgetComponentCount() — возвращает число

.элементов контейнера

Page 12: SWING

Возможности компонентов Генерация событий Обработка ввода пользователяРамки Отрисовка “ в ручную” ПоддержкаDrag & DropКомпановка…

Page 13: SWING

Тяжело- и легковесные компоненты (Тяжеловесные heavyweight) компоненты Отрисовываются операционной системой Большинство AWT-компонент

(Легковесные ligntweight) компоненты Отрисовываются java-кодом Все Swing- , компоненты кроме окон

верхнего уровня Тяжеловесные компоненты всегда

отрисовываются поверх легковесных

Page 14: SWING

Компоновка

Page 15: SWING

Компоновщики Размещают компоненты внутриконтейнера

Интерфейс java.awt.LayoutManager

panel.setLayout(new FlowLayout());

Page 16: SWING

Работа компоновщика , Разместить компоненты так что бы

удовлетворялись рекомендации Рекомендации по размеру

Dimension minimumSize – минимальныйDimension preferredSize – наилучшийDimension maximumSize -- максимальный

Page 17: SWING

FlowLayout Компоненты выкладываются одна за

, другой с переносом строкСвойства

alignment – выравниваниеLEADING, CENTER, TRAILING

vgap / hgap – / расстояние по горизонталивертикали

Page 18: SWING

BorderLayout Компоненты располагаются по краямСвойства

vgap / hgap – расстояние по вертикали / горизонтали

Page 19: SWING

GridLayout Компоненты располагаются в видетаблицы

Свойстваrows / columns – / количество строкстолбцов

vgap / hgap – расстояние повертикали / горизонтали

Page 20: SWING

BoxLayout Выкладывает компоненты горизонтально

/ вертикальноBox.createHorizontalBox()Box.createVerticalBox()

Box box = Box.createVerticalBox();box.add(new JButton(" "));Кнопкаbox.add(Box.createVerticalStrut(10));box.add(Box.createVerticalGlue());

Page 21: SWING

Другие компоновщикиCardLayout – помещает компоненты друг

за другомGridBagLayout – помещает компоненты в

гибкую таблицуSpringLayout – очень гибкий

, компоновщик используется прикодогенерации

Page 22: SWING

Запуск компоновщика – Автоматически при изменении размераконтейнера

В ручнуюinvalidate() – запросить перекомпоновку

компоненты и всех ее предковrevalidate() – thead-safe invalidate()

Page 23: SWING

DemotestFramePanel.java

Page 24: SWING

Обрамление

Page 25: SWING

Обрамление Каждая компонента может иметь

обрамление в виде рамки Пакет javax.swing.border Класс BorderМетод

Component.setBorder(Border)

Page 26: SWING

Размер обрамления Размер обрамления вычитается из

размера компоненты Класс Insets Конструктор Insets(left, right, bottom, top)Поля

left – отступ слеваright – отступ справаbottom – отступ снизуtop – отступ сверху

Page 27: SWING

Типы обрамлений (простые)Классы

EmptyBorder – пустоеместо

LineBorder – линияEtchedBorder – объемность

BevelBorder – / выпуклость

вдавленностьMatteBorder -

Обрамление“набирается” из рисунка

Page 28: SWING

Типы обрамлений (составные)TitledBorder – . обрамление с заголовком

Создается на основе другого обрамленияCompoundBorder – объединяет дваобрамленияCompoundBorder(insideBorder,

outsideBorder)

Page 29: SWING

Компоненты

Page 30: SWING

Класс JPanel Простейший контейнерКонструктор

JPanel(LayoutManager)Свойства

layoutManager -- компановщик

Page 31: SWING

Класс JLabelJLabel - Метка с текстомКонструктор

JLabel(text?, icon?)Свойства

text – надпись на меткеicon – картинка

Demo: testFrameComponents.java

Page 32: SWING

JButton - кнопкаJButton(String text?, Icon icon?)setRolloverIcon(Icon icon)setPressedIcon(Icon icon)setMargin(Insets margin)

Page 33: SWING

JToggleButton, JCheckBox, JRadioButtonJToggleButton - , кнопка которая может

: находиться в двух состояниях нажатом иотпущенном

JCheckBox, JRadioButton – наследники

ButtonGroup – взаимоисключающийконтейнер

Demo: SimpleWindowTogglesAsk to change

Page 34: SWING

Визуальные компонентыJTextField

setText(String text)getText(int offset, int length)

JPasswordFieldset(get)EchoChar(char echo)

JTextAreaappend(String text)insert(String text, int position)

Page 35: SWING

Панель прокрутки JScrollPane Панель с полосами прокруткиКонструктор

JScrollPane(Component?, vsbPolicy?, hsbPolicy?)<dir>_SCROLLBAR_AS_NEEDED <dir>_SCROLLBAR_NEVER<dir>_SCROLLBAR_ALWAYS

getContentPane().add(new JScrollPane(textArea));

Page 36: SWING

Иконки Класс ImageIconКонструктор

ImageIcon(url) – загрузить по URLImageIcon(file) – загрузить из файла

МетодыgetIconHeight() – высота иконкиgetIconWidth() – ширина иконкиgetImage() – платформозависимый рисунок

Применениеframe.setIconImage(icon.getImage())new JLable(icon);

Page 37: SWING

Визуальные компонентыJToolBarJComboBoxJSliderJTabbedPaneJListJProgressBar

Page 38: SWING

Обработка событий

Page 39: SWING

Классификация событий Низкоуровневые события

Создаются системой на основе действийпользователя

– Инициатор события текущая компонента Высокоуровневые события

Создаются компонентами на основе другихсобытий

– Инициатор события компонента создавшая событие

Page 40: SWING

Низкоуровневые события Ввод пользователя

InputEvent – базовый классKeyEvent – событие клавиатурыMouseEvent – событие мышиMouseWheelEvent – событие колесапрокрутки

Изменение состояния компонентыComponentEvent – / изменение видимости

/ размера местоположения компонентаFocusEvent – изменение фокусаContainerEvent – / добавление удалениекомпонент

WindowEvent – операции с окнами

Page 41: SWING

Обработка низкоуровневых событий Генерация событий

– Клавиатурные для компоненты владеющей фокусом

– , Мыши для компоненты над которой находится мышь

– Прочие для компоненты с которой произошли

Событие ввода может бытьпоглощено Метод consume()

Page 42: SWING

Высокоуровневые событияПримеры

ActionEvent – нажатие на кнопкуMenuEvent – операции с менюPopupMenuEvent – операции с

всплывающимменю…

Page 43: SWING

Слушатели Оповещаются о возникновении события Интерфейсы XXXListener Управление слушателями

Метод addXXXListener(XXXListener listener) – добавить слушателя

Метод removeXXXListener(XXXListener listener) – убрать слушателя

Page 44: SWING

Создание слушателя Реализация слушателя

1. Реализовать интерфейс2. Добавить слушателя к компоненту3. Реагировать на события

Вспомогательные классы XXXAdapter – для реализации слушателей

с несколькимиметодами

Page 45: SWING

MouseListener Слушатель событий от мыши должен

реализовать интерфейсMouseListener. В этом :интерфейсе перечислены следующиеметоды

mouseClicked(MouseEvent event) — выполнен щелчок мышкой на наблюдаемом объекте

mouseEntered(MouseEvent event) — курсор мыши вошел в область наблюдаемого объекта

mouseExited(MouseEvent event) — курсор мыши вышел из области наблюдаемого объекта

mousePressed(MouseEvent event) — кнопка мыши , нажата в момент когда курсор находится над

наблюдаемым объектомmouseReleased(MouseEvent event) — кнопка

, мыши отпущена в момент когда курсор находится над наблюдаемым объектом

Page 46: SWING

DemomouseListener

Page 47: SWING

СлушателиFocusListenerMouseWheelListenerKeyListenerChangeListenerWindowListenerСomponentListener – , смена положения

…размераActionListener – универсальныйслушательactionPerformed(ActionEvent event)

DEMO

Page 48: SWING

ActionListener Событие ActionEvent

СвойстваgetActionCommand() – название командыgetModifiers() – -состояние клавиш модификаторовgetWhen() – когда произошло

Слушатель ActionListener Метод actionPerformed(ActionEvent e)

Page 49: SWING

Действия – Действие абстракция действия которое

можно произвести Интерфейс ActionМетоды

actionPerformed(ActionEvent) – совершитьдействие

setEnabled(boolean) – / запретить разрешитьisEnabled() – проверить разрешениеputValue(key, value) – записать значениесвойства

getValue(key) – прочитать значение свойства

Page 50: SWING

Свойства действий Константы интерфейса Action

NAME – название действияSHORT_DESCRIPTION – описание для

всплывающих подсказокLONG_DESCRIPTION – описание для

контекстной помощиACTION_COMMAND_KEY – имя командыSMALL_ICON – иконка

DEMO

Page 51: SWING

Меню

Page 52: SWING

Меню Основное меню

Класс JMenuBar Раскрывающееся меню

Класс JMenu Элементы меню

Класс JMenuItem – простой Класс JCheckBoxMenuItem – помечаемый Класс JRadioButtonMenuItem – один из Класс JSeparator – разделитель

DEMO

Page 53: SWING

Swing и потоки

Page 54: SWING

Swing и потоки Обработка сообщений и перерисовка

интерфейса пользователя происходят в (потоке событий EventThread)

Если занять EventThread, GUI “зависнет” С видимыми компонентами можно

оперировать только в EventThreadGUI рекомендуется создавать в

EventThread

Page 55: SWING

Видимые компоненты , Компонента считается видимой если

Она добавлена к видимому контейнеру Окна считаются видимой

После вызова метода pack() После вызова setVisible(true)

Page 56: SWING

Исполнение действий в EventThread Класс SwingUtilities Методы

invokeLater(Runnable) – выполнить методrun() в EventThread

invokeAndWait(Runnable) – выполнить методrun() в EventThread и дождаться окончания

DEMO

Page 57: SWING

class Task extends Thread { public void run() { for (int i = 0; i <= 100; i++) { final int percent = i; try { SwingUtilities.invokeLater(new Runnable() { public void run() {SimpleWindowProgress.pBar.setValue(percent);} }); // !!!НЕДЕЛАЙТЕ ТАК SimpleWindowProgress.pBar.setValue(percent); Thread.sleep(100); } catch (InterruptedException e) {…} } }}