Download - Интерфейс пользователя Часть 1
![Page 1: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/1.jpg)
Java AdvancedИнтерфейс пользователя
Часть 1
![Page 2: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/2.jpg)
Java Advanced / Интерфейс пользователя 1 2
СПбГУ ИТМО
Georgiy Korneev
Содержание
1. Компоненты и контейнеры
2. Окна верхнего уровня
3. Компоновщики
4. Примеры компонент
5. Обрамление
6. Swing и потоки
7. Заключение
![Page 3: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/3.jpg)
Java Advanced / Интерфейс пользователя 1 3
СПбГУ ИТМО
Georgiy Korneev
Интерфейс пользователя
Платформозависимый интерфейс AWT Пакеты java.awt.*
Платформонезависимый интерфейс Swing Пакеты javax.swing.*
![Page 4: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/4.jpg)
Компоненты и контейнеры
Часть 1
![Page 5: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/5.jpg)
Java Advanced / Интерфейс пользователя 1 5Georgiy Korneev
Компоненты
Части интерфейса пользователя, не содержащие других компонентов JLabel – метка JButton – кнопка JMenuItem – элемент меню JTextArea – редактор текста
![Page 6: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/6.jpg)
Java Advanced / Интерфейс пользователя 1 6Georgiy Korneev
Контейнеры
Части интерфейса пользователя, содержащие другие компонентов JPanel – панель JFrame – окно приложения JDialog – диалоговое окно JSrollPane – область с полосой прокрутки
![Page 7: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/7.jpg)
Java Advanced / Интерфейс пользователя 1 7Georgiy Korneev
Возможности компонентов
Генерация событийОбработка ввода пользователяРамкиОтрисовка “в ручную”Поддержка Drag & DropКомпановка…
![Page 8: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/8.jpg)
Java Advanced / Интерфейс пользователя 1 8Georgiy Korneev
Тяжело- и легковесные компоненты
Тяжеловесные (heavyweight) компоненты Отрисовываются операционной системой Большинство AWT-компонент
Легковесные (lightweight) компоненты Отрисовываются java-кодом Все Swing-компоненты, кроме окон верхнего
уровня
Тяжеловесные компоненты всегда отрисовываются поверх легковесных
![Page 9: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/9.jpg)
Java Advanced / Интерфейс пользователя 1 9Georgiy Korneev
Пример: кнопки на панели
JPanel panel = new JPanel(new FlowLayout());
panel.add(new JButton("<html>e=mc<sup>2</sup></html>"));
panel.add(new JButton("Button 2"));
panel.add(new JButton("Button 3"));
panel.add(new JButton("Long-Named Button 4"));
panel.add(new JButton("5"));
![Page 10: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/10.jpg)
Окна верхнего уровняЧасть 2
![Page 11: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/11.jpg)
Java Advanced / Интерфейс пользователя 1 11Georgiy Korneev
Типы окон
Окно приложения Класс JFrame
Диалоговое окно Класс JDialog
Окно апплета Класс JApplet
Вложенное окно Класс JInternalFrame
![Page 12: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/12.jpg)
Java Advanced / Интерфейс пользователя 1 12Georgiy Korneev
Структура окна
Методы getXXXPane() – возвращает панель setXXXPane() – устанавливает панель
![Page 13: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/13.jpg)
Java Advanced / Интерфейс пользователя 1 13Georgiy Korneev
Окна приложения
Класс JFrameКонструкторы
JFrame(title)
Свойства title – заголовок jMenuBar – меню iconImage – иконка окна
![Page 14: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/14.jpg)
Java Advanced / Интерфейс пользователя 1 14Georgiy Korneev
Закрытие окон
Метод setDefaultCloseOperation(operation) –
установить действие при закрытии окна HIDE_ON_CLOSE DO_NOTHING_ON_CLOSE DISPOSE_ON_CLOSE EXIT_ON_CLOSE (JFrame)
![Page 15: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/15.jpg)
Java Advanced / Интерфейс пользователя 1 15Georgiy Korneev
Пример: окно с кнопками
JFrame frame = new JFrame("SimpleDemo");
< … Созданние панели … >
// Добавление панели к окну
frame.getContentPane().add(panel);
frame.pack(); // подгонка размера
frame.setVisible(true); // Показать пользователю
![Page 16: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/16.jpg)
Java Advanced / Интерфейс пользователя 1 16Georgiy Korneev
Меню
Основное меню Класс JMenuBar
Раскрывающееся меню Класс JMenu
Элементы меню Класс JMenuItem – простой Класс JCheckBoxMenuItem – помечаемый Класс JRadioButtonMenuItem – один из Класс JSeparator – разделитель
![Page 17: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/17.jpg)
Java Advanced / Интерфейс пользователя 1 17Georgiy Korneev
Пример: окно с меню (2)
frame.setJMenuBar(createMainMenu());
…
public static JMenuBar createMainMenu() {
JMenuBar mainMenu = new JMenuBar();
mainMenu.add(createFileMenu());
mainMenu.add(createTestMenu());
mainMenu.add(createHelpMenu());
return mainMenu;
}
![Page 18: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/18.jpg)
Java Advanced / Интерфейс пользователя 1 18Georgiy Korneev
Пример: окно с меню (2)
public static JMenu createFileMenu() { JMenu fileMenu = new JMenu("File"); fileMenu.setMnemonic(KeyEvent.VK_F);
fileMenu.add(new JMenuItem("Open")); fileMenu.add(new JMenuItem("Save")); fileMenu.add(new JSeparator()); fileMenu.add(new JMenuItem("Exit"));
return fileMenu; }
![Page 19: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/19.jpg)
Java Advanced / Интерфейс пользователя 1 19Georgiy Korneev
Пример: окно с меню (3)
![Page 20: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/20.jpg)
Java Advanced / Интерфейс пользователя 1 20Georgiy Korneev
Работа с диалогами
Класс JDialogКонструкторы
JDialog(owner, title, modal)
Свойства String title -- заголовок boolean modal – модальность
![Page 21: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/21.jpg)
Java Advanced / Интерфейс пользователя 1 21Georgiy Korneev
Стандартные диалоги
Класс JOptionPaneМетоды
showConfirmDialog(…) – да/нет/отмена showInputDialog(…) – ввод текста showMessageDialog(…) – информация showOptionDialog(…) – выбор из списка
Параметры parentComponent – родительская компонента message – сообщение optionType – набор кнопок messageType – вид иконки
![Page 22: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/22.jpg)
КомпоновщикиЧасть 3
![Page 23: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/23.jpg)
Java Advanced / Интерфейс пользователя 1 23Georgiy Korneev
Компоновщики
Размещают компоненты внутри контейнера
Интерфейс java.awt.LayoutManager
![Page 24: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/24.jpg)
Java Advanced / Интерфейс пользователя 1 24Georgiy Korneev
Работа компоновщика
Разместить компоненты так, что бы удовлетворялись рекомендации
Рекомендации по размеру Dimension minimumSize – минимальный Dimension preferredSize – наилучший Dimension maximumSize -- максимальный
![Page 25: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/25.jpg)
Java Advanced / Интерфейс пользователя 1 25Georgiy Korneev
Применение компоновщиков
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(new JButton("1“), BorderLayout.PAGE_START);
panel.add(new JButton("1“), BorderLayout.PAGE_END);
![Page 26: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/26.jpg)
Java Advanced / Интерфейс пользователя 1 26Georgiy Korneev
FlowLayout
Компоненты выкладываются одна за другой, с переносом строк
Свойства alignment – выравнивание
LEADING, CENTER, TRAILING vgap / hgap – расстояние по горизонтали /
вертикали
![Page 27: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/27.jpg)
Java Advanced / Интерфейс пользователя 1 27Georgiy Korneev
BorderLayout
Компоненты располагаются по краямСвойства
vgap / hgap – расстояние по вертикали / горизонтали
![Page 28: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/28.jpg)
Java Advanced / Интерфейс пользователя 1 28Georgiy Korneev
GridLayout
Компоненты располагаются в виде таблицы
Свойства rows / columns – количество строк /
столбцов vgap / hgap – расстояние по вертикали /
горизонтали
![Page 29: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/29.jpg)
Java Advanced / Интерфейс пользователя 1 29Georgiy Korneev
BoxLayout
Выкладывает компоненты горизонтально / вертикально
Конструктор BoxLayout(container, axis)
PAGE_AXIS, LINE_AXIS
![Page 30: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/30.jpg)
Java Advanced / Интерфейс пользователя 1 30Georgiy Korneev
Другие компоновщики
CardLayout – помещает компоненты друг за другом
GridBagLayout – помещает компоненты в гибкую таблицу
SpringLayout – очень гибкий компоновщик, используется при кодогенерации
![Page 31: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/31.jpg)
Java Advanced / Интерфейс пользователя 1 31Georgiy Korneev
Запуск компоновщика
Автоматически – при изменении размера контейнера
В ручную invalidate() – запросить перекомпоновку
компоненты и всех ее предков revalidate() – thead-safe invalidate()
![Page 32: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/32.jpg)
Примеры компонентЧасть 4
![Page 33: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/33.jpg)
Java Advanced / Интерфейс пользователя 1 33Georgiy Korneev
Класс JPanel
Простейший контейнерКонструктор
JPanel(LayoutManager)
Свойства layoutManager -- компановщик
![Page 34: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/34.jpg)
Java Advanced / Интерфейс пользователя 1 34Georgiy Korneev
Класс JLabel
Метка с текстомКонструктор
JLabel(text?, icon?)
Свойства text – надпись на метке icon – картинка labelFor – для какой компоненты
![Page 35: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/35.jpg)
Java Advanced / Интерфейс пользователя 1 35Georgiy Korneev
Класс JScrollPane
Панель с полосами прокруткиКонструктор
JScrollPane(Component?, vsbPolicy?, hsbPolicy?) <dir>_SCROLLBAR_AS_NEEDED <dir>_SCROLLBAR_NEVER <dir>_SCROLLBAR_ALWAYS
![Page 36: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/36.jpg)
Java Advanced / Интерфейс пользователя 1 36Georgiy Korneev
Иконки
Класс ImageIconКонструктор
ImageIcon(url) – загрузить по URL ImageIcon(file) – загрузить из файла
Методы getIconHeight() – высота иконки getIconWidth() – ширина иконки getImage() – платформозависимый рисунок
Применение frame.setIconImage(icon.getImage()) new JLable(icon);
![Page 37: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/37.jpg)
Java Advanced / Интерфейс пользователя 1 37Georgiy Korneev
Класс JSplitPane
Разделяет контейнер на две частиКонструктор
JSplitPane (orientation) HORIZONTAL_SPLIT VERTICAL_SPLIT
Свойства leftComponent – компонента слева rightComponent – компонента справа
![Page 38: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/38.jpg)
ОбрамлениеЧасть 5
![Page 39: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/39.jpg)
Java Advanced / Интерфейс пользователя 1 39Georgiy Korneev
Обрамление
Каждая компонента может иметь обрамление в виде рамки
Пакет javax.swing.borderКласс BorderМетод
Component.setBorder(Border)
![Page 40: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/40.jpg)
Java Advanced / Интерфейс пользователя 1 40Georgiy Korneev
Размер обрамления
Размер обрамления вычитается из размера компоненты
Класс InsetsКонструктор Insets(left, right, bottom, top)Поля
left – отступ слева right – отступ справа bottom – отступ снизу top – отступ сверху
![Page 41: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/41.jpg)
Java Advanced / Интерфейс пользователя 1 41Georgiy Korneev
Типы обрамлений
ПростыеНаборныеС заголовкомСоставные
![Page 42: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/42.jpg)
Java Advanced / Интерфейс пользователя 1 42Georgiy Korneev
Простые обрамления
Классы EmptyBorder –
пустое место LineBorder – линия EtchedBorder –
объемность BevelBorder –
выпуклость / вдавленность
![Page 43: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/43.jpg)
Java Advanced / Интерфейс пользователя 1 43Georgiy Korneev
Наборные обрамления
Обрамление “набирается” из рисункаКласс MatteBorder
![Page 44: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/44.jpg)
Java Advanced / Интерфейс пользователя 1 44Georgiy Korneev
Обрамления с заголовком
Свойства justification –
горизонтальное местоположение
position – вертикальное местопложение
Создается на основе другого обрамления Класс TitledBorder
![Page 45: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/45.jpg)
Java Advanced / Интерфейс пользователя 1 45Georgiy Korneev
Составное обрамление
Объединяет два обрамленияКласс CompoundBorderКонструктор
CompoundBorder(insideBorder, outsideBorder)
![Page 46: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/46.jpg)
Java Advanced / Интерфейс пользователя 1 46Georgiy Korneev
Фабрика обрамлений
Класс BorderFactoryМетоды
create<…>Border(properties)
![Page 47: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/47.jpg)
Swing и потокиЧасть 6
![Page 48: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/48.jpg)
Java Advanced / Интерфейс пользователя 1 48Georgiy Korneev
Swing и потоки
Обработка сообщений и перерисовка интерфейса пользователя происходят в потоке событий (EventThread)
Если занять EventThread, GUI “зависнет”С видимыми компонентами можно
оперировать только в EventThreadGUI рекомендуется создавать в
EventThread
![Page 49: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/49.jpg)
Java Advanced / Интерфейс пользователя 1 49Georgiy Korneev
Видимые компоненты
Компонента считается видимой, если Она добавлена к видимому контейнеру
Окна считаются видимой После вызова метода pack() После вызова setVisible(true)
![Page 50: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/50.jpg)
Java Advanced / Интерфейс пользователя 1 50Georgiy Korneev
Исполнение действий в EventThread
Класс SwingUtilitiesМетоды
invokeLater(Runnable) – выполнить метод run() в EventThread
invokeAndWait(Runnable) – выполнить метод run() в EventThread и дождаться окончания
![Page 51: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/51.jpg)
ЗаключениеЧасть 7
![Page 52: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/52.jpg)
Java Advanced / Интерфейс пользователя 1 52Georgiy Korneev
Ссылки
Creating a GUI with JFC/Swing (Tutorial) // http://java.sun.com/docs/books/tutorial/uiswing/
Java Foundation Classes // http://java.sun.com/products/jfc/
Swing Connection // http://java.sun.com/products/jfc/tsc/
![Page 53: Интерфейс пользователя Часть 1](https://reader035.vdocuments.mx/reader035/viewer/2022062323/5681554f550346895dc31b92/html5/thumbnails/53.jpg)
Java Advanced / Интерфейс пользователя 1 53
СПбГУ ИТМО
Georgiy Korneev
Вопросы