Технологии Java

Стандартные компоненты

Интерфейс пользователя

  • Платформозависимый интерфейс
    • AWT
    • Пакеты java.awt.*
  • Платформонезависимый интерфейс
    • Swing
    • Пакеты javax.swing.*

Компоненты и контейнеры

Содержание

Компоненты

  • Части интерфейса пользователя, не содержащие других компонентов

Контейнеры

  • Части интерфейса пользователя, содержащие другие компоненты
    • JPanel – панель
    • JFrame – окно приложения
    • JDialog – диалоговое окно
    • JScrollPane – область с полосой прокрутки

Возможности компонентов

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

Тяжело- и легковесные компоненты

  • Тяжеловесные (heavyweight) компоненты
    • Отрисовываются операционной системой
    • Большинство AWT-компонент
  • Легковесные (ligntweight) компоненты
    • Отрисовываются java-кодом
    • Все Swing-компоненты, кроме окон верхнего уровня
  • Тяжеловесные компоненты всегда отрисовываются поверх легковесных

Пример: кнопки на панели

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"));

Типы окон

  • Окно приложения
  • Диалоговое окно
  • Окно апплета
  • Вложенное окно

Структура окна

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

Окна приложения

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

Пример: окно с кнопками

  •  JFrame frame = new JFrame("SimpleDemo");
    // Добавление панели к окну
    frame.getContentPane().add(panel);
    // Удалять при закрытии
    frame.setDefaultCloseOperation(
        JFrame.DISPOSE_ON_CLOSE);
    frame.pack(); // подгонка размера
    frame.setVisible(true); // Показать пользователю
    

Типы меню

Пример: окно с меню (2)

  • Создание главного меню
    • frame.setJMenuBar(createMainMenu());
      …
      public static JMenuBar createMainMenu() {
          JMenuBar mainMenu = new JMenuBar();
          mainMenu.add(createFileMenu());
          mainMenu.add(createTestMenu());
          mainMenu.add(createHelpMenu());
          return mainMenu;
      }
      

Пример: окно с меню (2)

  • Создание меню «File»
    • public static JMenu createFileMenu() {
          JMenu fileMenu = new JMenu("File");
          fileMenu.setMnemonic('F');
          fileMenu.add(new JMenuItem("Open"));
          fileMenu.add(new JMenuItem("Save"));
          fileMenu.add(new JSeparator());
          fileMenu.add(new JMenuItem("Exit"));
          return fileMenu;
      }
      

Пример: окно с меню (3)

Работа с диалогами

Стандартные диалоги

Стандартные диалоги

Компоновщики

Применение компоновщиков

  • JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.add(new JButton("Start"), 
        BorderLayout.PAGE_START);
    panel.add(new JButton("End"), 
        BorderLayout.PAGE_END);
    

Построчная

  • Компоненты выкладываются одна за другой, с переносом строк
  • Свойства

По краям

  • Компоненты располагаются по краям
  • Свойства
    • vgap / hgap – вертикальное / гориз. расстояние

Табличная

  • Компоненты располагаются в виде таблицы
  • Свойства
    • rows / columns – количество строк / столбцов
    • vgap / hgap – вертикальное / гориз. расстояние

Стопка

Другие компоновщики

  • CardLayout – помещает компоненты друг за другом
  • GridBagLayout – помещает компоненты в гибкую таблицу
  • SpringLayout, GroupLayout – очень гибкие компоновщики, предназначены для кодогенерации

Запуск компоновщика

  • Автоматически
    • При изменении размера контейнера
  • В ручную

Примеры компонент

Содержание

Панель

Метка с текстом

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

Разделители

Иконки

Обрамление

  • Каждая компонента может иметь обрамление в виде рамки
  • Свойство компоненты

Размер обрамления

  • Размер обрамления вычитается из размера компоненты
  • Поля
    • left – отступ слева
    • right – отступ справа
    • bottom – отступ снизу
    • top – отступ сверху

Простые обрамления

Наборные обрамления

Обрамления с заголовком

Составное обрамление

Фабрика обрамлений

  • Класс BorderFactory
  • Методы
    • create<…>Border(properties)

Swing и потоки

  • Обработка сообщений и перерисовка интерфейса пользователя происходят в потоке событий (EventThread)
  • Если занять EventThread, GUI “зависнет”
  • С видимыми компонентами можно оперировать только в EventThread
  • GUI рекомендуется создавать в EventThread

Видимые компоненты

  • Компонента считается видимой, если
    • Она добавлена к видимому контейнеру
  • Окно считается видимым

Исполнение действий в EventThread

Ссылки

Вопросы