swing
DESCRIPTION
SWING. Графические библиотеки. AWT – платформозависимая, java.awt.* Swing – платформонезависимая, java.swing.* SWT – платформозависимая. Окна верхнего уровня. Окно приложения Класс JFrame Диалоговое окно Класс JDialog Окно апплета Класс JApplet Вложенное окно - PowerPoint PPT PresentationTRANSCRIPT
SWING
Графические библиотекиAWT – , платформозависимая java.awt.*Swing – , платформонезависимая
java.swing.*SWT – платформозависимая
Окна верхнего уровня Окно приложения
Класс JFrame Диалоговое окно
Класс JDialog Окно апплета
Класс JApplet Вложенное окно
Класс JInternalFrame
DemotestFrame.javatestFrame2.java
Окна приложения Класс JFrameКонструкторы
JFrame(title)Свойства
title – заголовокjMenuBar – менюiconImage – иконка окна
Закрытие окнаМетод
setDefaultCloseOperation(operation) – установить действие при закрытии окна
DO_NOTHING_ON_CLOSEHIDE_ON_CLOSE DISPOSE_ON_CLOSE EXIT_ON_CLOSE (JFrame)
Стандартные диалоги Класс JOptionPaneМетоды
showConfirmDialog(…) – / /да нет отменаshowInputDialog(…) – ввод текстаshowMessageDialog(…) – информацияshowOptionDialog(…) – выбор из списка
ПараметрыparentComponent – родительскаякомпонента
message – сообщениеoptionType – набор кнопокmessageType – вид иконки
Панель содержимогоМетоды
getXXXPane() – возвращает панельsetXXXPane() – устанавливает панель
getContentPane(), setContentPane()
DemotestFrameButton
Компоненты , Части интерфейса пользователя не
содержащие других компонентовJLabel – меткаJButton – кнопкаJMenuItem – элемент менюJTextArea – редактор текста
Контейнеры , Части интерфейса пользователя содержащие другие
компонентыJPanel – панельJFrame – окно приложенияJDialog – диалоговое окноJSrollPane – область с полосой прокрутки
add(Component component) — добавляет в контейнер элемент component;
remove(Component component) — удаляет из контейнера элемент component;
removeAll() — ;удаляет все элементы контейнераgetComponentCount() — возвращает число
.элементов контейнера
Возможности компонентов Генерация событий Обработка ввода пользователяРамки Отрисовка “ в ручную” ПоддержкаDrag & DropКомпановка…
Тяжело- и легковесные компоненты (Тяжеловесные heavyweight) компоненты Отрисовываются операционной системой Большинство AWT-компонент
(Легковесные ligntweight) компоненты Отрисовываются java-кодом Все Swing- , компоненты кроме окон
верхнего уровня Тяжеловесные компоненты всегда
отрисовываются поверх легковесных
Компоновка
Компоновщики Размещают компоненты внутриконтейнера
Интерфейс java.awt.LayoutManager
panel.setLayout(new FlowLayout());
Работа компоновщика , Разместить компоненты так что бы
удовлетворялись рекомендации Рекомендации по размеру
Dimension minimumSize – минимальныйDimension preferredSize – наилучшийDimension maximumSize -- максимальный
FlowLayout Компоненты выкладываются одна за
, другой с переносом строкСвойства
alignment – выравниваниеLEADING, CENTER, TRAILING
vgap / hgap – / расстояние по горизонталивертикали
BorderLayout Компоненты располагаются по краямСвойства
vgap / hgap – расстояние по вертикали / горизонтали
GridLayout Компоненты располагаются в видетаблицы
Свойстваrows / columns – / количество строкстолбцов
vgap / hgap – расстояние повертикали / горизонтали
BoxLayout Выкладывает компоненты горизонтально
/ вертикальноBox.createHorizontalBox()Box.createVerticalBox()
Box box = Box.createVerticalBox();box.add(new JButton(" "));Кнопкаbox.add(Box.createVerticalStrut(10));box.add(Box.createVerticalGlue());
Другие компоновщикиCardLayout – помещает компоненты друг
за другомGridBagLayout – помещает компоненты в
гибкую таблицуSpringLayout – очень гибкий
, компоновщик используется прикодогенерации
Запуск компоновщика – Автоматически при изменении размераконтейнера
В ручнуюinvalidate() – запросить перекомпоновку
компоненты и всех ее предковrevalidate() – thead-safe invalidate()
DemotestFramePanel.java
Обрамление
Обрамление Каждая компонента может иметь
обрамление в виде рамки Пакет javax.swing.border Класс BorderМетод
Component.setBorder(Border)
Размер обрамления Размер обрамления вычитается из
размера компоненты Класс Insets Конструктор Insets(left, right, bottom, top)Поля
left – отступ слеваright – отступ справаbottom – отступ снизуtop – отступ сверху
Типы обрамлений (простые)Классы
EmptyBorder – пустоеместо
LineBorder – линияEtchedBorder – объемность
BevelBorder – / выпуклость
вдавленностьMatteBorder -
Обрамление“набирается” из рисунка
Типы обрамлений (составные)TitledBorder – . обрамление с заголовком
Создается на основе другого обрамленияCompoundBorder – объединяет дваобрамленияCompoundBorder(insideBorder,
outsideBorder)
Компоненты
Класс JPanel Простейший контейнерКонструктор
JPanel(LayoutManager)Свойства
layoutManager -- компановщик
Класс JLabelJLabel - Метка с текстомКонструктор
JLabel(text?, icon?)Свойства
text – надпись на меткеicon – картинка
Demo: testFrameComponents.java
JButton - кнопкаJButton(String text?, Icon icon?)setRolloverIcon(Icon icon)setPressedIcon(Icon icon)setMargin(Insets margin)
JToggleButton, JCheckBox, JRadioButtonJToggleButton - , кнопка которая может
: находиться в двух состояниях нажатом иотпущенном
JCheckBox, JRadioButton – наследники
ButtonGroup – взаимоисключающийконтейнер
Demo: SimpleWindowTogglesAsk to change
Визуальные компонентыJTextField
setText(String text)getText(int offset, int length)
JPasswordFieldset(get)EchoChar(char echo)
JTextAreaappend(String text)insert(String text, int position)
Панель прокрутки JScrollPane Панель с полосами прокруткиКонструктор
JScrollPane(Component?, vsbPolicy?, hsbPolicy?)<dir>_SCROLLBAR_AS_NEEDED <dir>_SCROLLBAR_NEVER<dir>_SCROLLBAR_ALWAYS
getContentPane().add(new JScrollPane(textArea));
Иконки Класс ImageIconКонструктор
ImageIcon(url) – загрузить по URLImageIcon(file) – загрузить из файла
МетодыgetIconHeight() – высота иконкиgetIconWidth() – ширина иконкиgetImage() – платформозависимый рисунок
Применениеframe.setIconImage(icon.getImage())new JLable(icon);
Визуальные компонентыJToolBarJComboBoxJSliderJTabbedPaneJListJProgressBar
Обработка событий
Классификация событий Низкоуровневые события
Создаются системой на основе действийпользователя
– Инициатор события текущая компонента Высокоуровневые события
Создаются компонентами на основе другихсобытий
– Инициатор события компонента создавшая событие
Низкоуровневые события Ввод пользователя
InputEvent – базовый классKeyEvent – событие клавиатурыMouseEvent – событие мышиMouseWheelEvent – событие колесапрокрутки
Изменение состояния компонентыComponentEvent – / изменение видимости
/ размера местоположения компонентаFocusEvent – изменение фокусаContainerEvent – / добавление удалениекомпонент
WindowEvent – операции с окнами
Обработка низкоуровневых событий Генерация событий
– Клавиатурные для компоненты владеющей фокусом
– , Мыши для компоненты над которой находится мышь
– Прочие для компоненты с которой произошли
Событие ввода может бытьпоглощено Метод consume()
Высокоуровневые событияПримеры
ActionEvent – нажатие на кнопкуMenuEvent – операции с менюPopupMenuEvent – операции с
всплывающимменю…
Слушатели Оповещаются о возникновении события Интерфейсы XXXListener Управление слушателями
Метод addXXXListener(XXXListener listener) – добавить слушателя
Метод removeXXXListener(XXXListener listener) – убрать слушателя
Создание слушателя Реализация слушателя
1. Реализовать интерфейс2. Добавить слушателя к компоненту3. Реагировать на события
Вспомогательные классы XXXAdapter – для реализации слушателей
с несколькимиметодами
MouseListener Слушатель событий от мыши должен
реализовать интерфейсMouseListener. В этом :интерфейсе перечислены следующиеметоды
mouseClicked(MouseEvent event) — выполнен щелчок мышкой на наблюдаемом объекте
mouseEntered(MouseEvent event) — курсор мыши вошел в область наблюдаемого объекта
mouseExited(MouseEvent event) — курсор мыши вышел из области наблюдаемого объекта
mousePressed(MouseEvent event) — кнопка мыши , нажата в момент когда курсор находится над
наблюдаемым объектомmouseReleased(MouseEvent event) — кнопка
, мыши отпущена в момент когда курсор находится над наблюдаемым объектом
DemomouseListener
СлушателиFocusListenerMouseWheelListenerKeyListenerChangeListenerWindowListenerСomponentListener – , смена положения
…размераActionListener – универсальныйслушательactionPerformed(ActionEvent event)
DEMO
ActionListener Событие ActionEvent
СвойстваgetActionCommand() – название командыgetModifiers() – -состояние клавиш модификаторовgetWhen() – когда произошло
Слушатель ActionListener Метод actionPerformed(ActionEvent e)
Действия – Действие абстракция действия которое
можно произвести Интерфейс ActionМетоды
actionPerformed(ActionEvent) – совершитьдействие
setEnabled(boolean) – / запретить разрешитьisEnabled() – проверить разрешениеputValue(key, value) – записать значениесвойства
getValue(key) – прочитать значение свойства
Свойства действий Константы интерфейса Action
NAME – название действияSHORT_DESCRIPTION – описание для
всплывающих подсказокLONG_DESCRIPTION – описание для
контекстной помощиACTION_COMMAND_KEY – имя командыSMALL_ICON – иконка
DEMO
Меню
Меню Основное меню
Класс JMenuBar Раскрывающееся меню
Класс JMenu Элементы меню
Класс JMenuItem – простой Класс JCheckBoxMenuItem – помечаемый Класс JRadioButtonMenuItem – один из Класс JSeparator – разделитель
DEMO
Swing и потоки
Swing и потоки Обработка сообщений и перерисовка
интерфейса пользователя происходят в (потоке событий EventThread)
Если занять EventThread, GUI “зависнет” С видимыми компонентами можно
оперировать только в EventThreadGUI рекомендуется создавать в
EventThread
Видимые компоненты , Компонента считается видимой если
Она добавлена к видимому контейнеру Окна считаются видимой
После вызова метода pack() После вызова setVisible(true)
Исполнение действий в EventThread Класс SwingUtilities Методы
invokeLater(Runnable) – выполнить методrun() в EventThread
invokeAndWait(Runnable) – выполнить методrun() в EventThread и дождаться окончания
DEMO
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) {…} } }}