SWING - Краткое руководство

Swing API - это набор расширяемых компонентов графического интерфейса, которые упрощают жизнь разработчикам при создании приложений Front End / GUI на основе JAVA. Он построен на основе AWT API и действует как замена AWT API, поскольку имеет почти все элементы управления, соответствующие элементам управления AWT. Компонент Swing следует архитектуре модель-представление-контроллер, чтобы соответствовать следующим критериям.

  • Одного API должно быть достаточно для поддержки нескольких интерфейсов.

  • API должен управляться моделью, поэтому для API самого высокого уровня не требуется наличие данных.

  • API должен использовать модель Java Bean, чтобы инструменты Builder Tools и IDE могли предоставлять разработчикам более качественные услуги.

Архитектура MVC

Архитектура Swing API следует за свободно основанной архитектурой MVC следующим образом.

  • Модель представляет данные компонента.

  • Представление представляет собой визуальное представление данных компонента.

  • Контроллер принимает ввод от пользователя в представлении и отражает изменения в данных компонента.

  • Компонент Swing имеет модель как отдельный элемент, в то время как части View и Controller объединены в элементы пользовательского интерфейса. По этой причине Swing имеет подключаемую архитектуру внешнего вида.

Особенности качелей

  • Light Weight - Компоненты Swing не зависят от API собственной операционной системы, поскольку элементы управления Swing API визуализируются в основном с использованием чистого кода JAVA вместо вызовов базовой операционной системы.

  • Rich Controls - Swing предоставляет богатый набор расширенных элементов управления, таких как Tree, TabbedPane, слайдер, средство выбора цвета и элементы управления таблицей.

  • Highly Customizable - Элементы управления Swing можно легко настроить, так как внешний вид не зависит от внутреннего представления.

  • Pluggable look-and-feel - GUI на основе SWING Внешний вид приложения может быть изменен во время выполнения в зависимости от доступных значений.

В этом разделе вы узнаете, как загрузить и установить Java на свой компьютер. Пожалуйста, используйте следующие шаги, чтобы настроить среду.

Java SE бесплатно доступен по ссылке Загрузить Java . Следовательно, вы можете загрузить версию, основанную на вашей операционной системе.

Следуйте инструкциям, чтобы загрузить Java и запустить .exeчтобы установить Java на свой компьютер. После того, как вы установили Java на свой компьютер, вам нужно будет установить переменные среды так, чтобы они указывали на правильные каталоги установки.

Настройка пути для Windows 2000 / XP

Предполагая, что вы установили Java в c:\Program Files\java\jdk каталог -

Step 1 - Щелкните правой кнопкой мыши «Мой компьютер» и выберите «Свойства».

Step 2 - Нажмите кнопку «Переменные среды» на вкладке «Дополнительно».

Step 3- Измените переменную «Путь», чтобы она также содержала путь к исполняемому файлу Java. Например, если путь в настоящее время установлен на'C:\WINDOWS\SYSTEM32', затем измените свой путь на чтение 'C:\WINDOWS\SYSTEM32;c:\Program Files\java\jdk\bin'.

Настройка пути для Windows 95/98 / ME

Предполагая, что вы установили Java в c:\Program Files\java\jdk каталог -

Step 1 - Отредактируйте 'C:\autoexec.bat' файл и добавьте в конец следующую строку: 'SET PATH=%PATH%;C:\Program Files\java\jdk\bin'.

Настройка пути для Linux, UNIX, Solaris, FreeBSD

Переменная среды PATH должна указывать на место установки двоичных файлов Java. Обратитесь к документации по Shell, если у вас возникли проблемы с этим.

Например, если вы используете bash в качестве оболочки, вы должны добавить следующую строку в конец '.bashrc: export PATH=/path/to/java:$PATH'.

Популярные редакторы Java

Для написания программ на Java вам понадобится текстовый редактор. На рынке доступны даже более сложные IDE. Но пока вы можете рассмотреть одно из следующих:

  • Notepad - На компьютере с Windows вы можете использовать любой простой текстовый редактор, например Блокнот (рекомендуется для этого урока), TextPad.

  • Netbeans - Netbeans - это бесплатная Java IDE с открытым исходным кодом, которую можно загрузить с https://www.netbeans.org/index.html.

  • Eclipse - Eclipse также является Java IDE, разработанной сообществом Eclipse с открытым исходным кодом, и ее можно загрузить с https://www.eclipse.org/.

Каждый пользовательский интерфейс учитывает следующие три основных аспекта:

  • UI Elements- Это основные визуальные элементы, которые пользователь в конечном итоге видит и с которыми взаимодействует. GWT предоставляет огромный список широко используемых и распространенных элементов, варьирующихся от базовых до сложных, которые мы рассмотрим в этом руководстве.

  • Layouts- Они определяют, как элементы пользовательского интерфейса должны быть организованы на экране, и обеспечивают окончательный вид GUI (графический интерфейс пользователя). Эта часть будет рассмотрена в главе «Макет».

  • Behavior- Это события, которые происходят, когда пользователь взаимодействует с элементами пользовательского интерфейса. Эта часть будет рассмотрена в главе «Обработка событий».

Каждый элемент управления SWING наследует свойства из следующей иерархии классов компонентов.

S.No. Класс и описание
1 Составная часть

Компонент - это абстрактный базовый класс для элементов управления SWING без меню. Компонент представляет собой объект с графическим представлением

2 Контейнер

Контейнер - это компонент, который может содержать другие компоненты SWING.

3 JComponent

JComponent - это базовый класс для всех компонентов пользовательского интерфейса SWING. Чтобы использовать компонент SWING, который наследуется от JComponent, компонент должен находиться в иерархии включения, корень которой является контейнером SWING верхнего уровня.

Элементы пользовательского интерфейса SWING

Ниже приводится список часто используемых элементов управления при разработке графического интерфейса пользователя с использованием SWING.

S.No. Класс и описание
1 JLabel

Объект JLabel - это компонент для размещения текста в контейнере.

2 JButton

Этот класс создает кнопку с меткой.

3 JColorChooser

JColorChooser предоставляет панель элементов управления, предназначенную для того, чтобы пользователь мог управлять и выбирать цвет.

4 Коробка JCheck

JCheckBox - это графический компонент, который может быть on (правда) или off (ложное) состояние.

5 JRadioButton

Класс JRadioButton - это графический компонент, который может быть on (правда) или off(ложное) состояние. в группе.

6 JList

Компонент JList представляет пользователю прокручиваемый список текстовых элементов.

7 JComboBox

Компонент JComboBox представляет пользователю меню выбора.

8 JTextField

Объект JTextField - это текстовый компонент, который позволяет редактировать одну строку текста.

9 JPasswordField

Объект JPasswordField - это текстовый компонент, предназначенный для ввода пароля.

10 JTextArea

Объект JTextArea - это текстовый компонент, который позволяет редактировать несколько строк текста.

11 ImageIcon

Элемент управления ImageIcon - это реализация интерфейса Icon, который рисует значки из изображений.

12 JScrollbar

Элемент управления «Полоса прокрутки» представляет собой компонент полосы прокрутки, позволяющий пользователю выбирать из диапазона значений.

13 JOptionPane

JOptionPane предоставляет набор стандартных диалоговых окон, которые запрашивают у пользователей значение или информируют их о чем-то.

14 JFileChooser

Элемент управления JFileChooser представляет собой диалоговое окно, в котором пользователь может выбрать файл.

15 JProgressBar

По мере того, как задача приближается к завершению, индикатор выполнения отображает процент выполнения задачи.

16 JSlider

JSlider позволяет пользователю графически выбирать значение, перемещая ручку в пределах ограниченного интервала.

17 JSpinner

JSpinner - это однострочное поле ввода, которое позволяет пользователю выбрать число или значение объекта из упорядоченной последовательности.

В этой главе вы узнаете о событиях, их типах, а также научитесь обрабатывать событие. Для лучшего понимания в конце главы приводится пример.

Что такое событие?

Изменение состояния объекта известно как Event, т.е. событие описывает изменение состояния источника. События генерируются в результате взаимодействия пользователя с компонентами графического пользовательского интерфейса. Например, нажатие кнопки, перемещение мыши, ввод символа с клавиатуры, выбор элемента из списка и прокрутка страницы - это действия, которые вызывают событие.

Типы событий

События можно условно разделить на две категории:

  • Foreground Events- Эти события требуют прямого взаимодействия пользователя. Они создаются в результате взаимодействия человека с графическими компонентами графического пользовательского интерфейса. Например, нажатие на кнопку, перемещение мыши, ввод символа с клавиатуры, выбор элемента из списка, прокрутка страницы и т. Д.

  • Background Events- Эти события требуют взаимодействия конечного пользователя. Прерывания операционной системы, аппаратный или программный сбой, истечение таймера и завершение операции - вот некоторые примеры фоновых событий.

Что такое обработка событий?

Обработка событий - это механизм, который контролирует событие и решает, что должно произойти, если событие произойдет. Этот механизм имеет код, известный как обработчик событий, который выполняется при возникновении события.

Java использует модель событий делегирования для обработки событий. Эта модель определяет стандартный механизм генерации и обработки событий.

Модель события делегирования включает следующих основных участников.

  • Source- Источник - это объект, на котором происходит событие. Источник отвечает за предоставление информации о произошедшем событии своему обработчику. Java предоставляет нам классы для исходного объекта.

  • Listener- Он также известен как обработчик событий. Слушатель отвечает за создание ответа на событие. С точки зрения реализации Java слушатель также является объектом. Слушатель ждет, пока не получит событие. Как только событие получено, слушатель обрабатывает событие и затем возвращается.

Преимущество этого подхода в том, что логика пользовательского интерфейса полностью отделена от логики, генерирующей событие. Элемент пользовательского интерфейса может делегировать обработку события отдельному фрагменту кода.

В этой модели слушатель должен быть зарегистрирован в исходном объекте, чтобы слушатель мог получать уведомление о событии. Это эффективный способ обработки события, поскольку уведомления о событиях отправляются только тем слушателям, которые хотят их получать.

Шаги, связанные с обработкой событий

Step 1 - Пользователь нажимает кнопку, и событие создается.

Step 2 - Объект соответствующего класса событий создается автоматически, и информация об источнике и событии помещается в один и тот же объект.

Step 3 - Объект события передается методу зарегистрированного класса слушателя.

Step 4 - Метод выполняется и возвращается.

Что следует помнить о слушателе

  • Чтобы спроектировать класс слушателя, вы должны разработать несколько интерфейсов слушателя. Эти интерфейсы слушателя прогнозируют некоторые общедоступные абстрактные методы обратного вызова, которые должны быть реализованы классом слушателя.

  • Если вы не реализуете какой-либо из предопределенных интерфейсов, ваш класс не может действовать как класс-слушатель для исходного объекта.

Методы обратного вызова

Это методы, предоставляемые поставщиком API, определенные программистом приложения и вызываемые разработчиком приложения. Здесь методы обратного вызова представляют метод события. В ответ на событие java jre запустит метод обратного вызова. Все такие методы обратного вызова предоставляются в интерфейсах слушателя.

Если компонент хочет, чтобы какой-то слушатель слушал его события, источник должен зарегистрироваться в слушателе.

Пример обработки событий

Создайте следующую программу Java, используя любой редактор по вашему выбору, например D:/ > SWING > com > tutorialspoint > gui >

SwingControlDemo.java

package com.tutorialspoint.gui;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SwingControlDemo {
   private JFrame mainFrame;
   private JLabel headerLabel;
   private JLabel statusLabel;
   private JPanel controlPanel;

   public SwingControlDemo(){
      prepareGUI();
   }
   public static void main(String[] args){
      SwingControlDemo swingControlDemo = new SwingControlDemo();  
      swingControlDemo.showEventDemo();       
   }
   private void prepareGUI(){
      mainFrame = new JFrame("Java SWING Examples");
      mainFrame.setSize(400,400);
      mainFrame.setLayout(new GridLayout(3, 1));

      headerLabel = new JLabel("",JLabel.CENTER );
      statusLabel = new JLabel("",JLabel.CENTER);        
      statusLabel.setSize(350,100);
      
      mainFrame.addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent windowEvent){
            System.exit(0);
         }        
      });    
      controlPanel = new JPanel();
      controlPanel.setLayout(new FlowLayout());

      mainFrame.add(headerLabel);
      mainFrame.add(controlPanel);
      mainFrame.add(statusLabel);
      mainFrame.setVisible(true);  
   }
   private void showEventDemo(){
      headerLabel.setText("Control in action: Button"); 

      JButton okButton = new JButton("OK");
      JButton submitButton = new JButton("Submit");
      JButton cancelButton = new JButton("Cancel");

      okButton.setActionCommand("OK");
      submitButton.setActionCommand("Submit");
      cancelButton.setActionCommand("Cancel");

      okButton.addActionListener(new ButtonClickListener()); 
      submitButton.addActionListener(new ButtonClickListener()); 
      cancelButton.addActionListener(new ButtonClickListener()); 

      controlPanel.add(okButton);
      controlPanel.add(submitButton);
      controlPanel.add(cancelButton);       

      mainFrame.setVisible(true);  
   }
   private class ButtonClickListener implements ActionListener{
      public void actionPerformed(ActionEvent e) {
         String command = e.getActionCommand();  
         
         if( command.equals( "OK" ))  {
            statusLabel.setText("Ok Button clicked.");
         } else if( command.equals( "Submit" ) )  {
            statusLabel.setText("Submit Button clicked."); 
         } else {
            statusLabel.setText("Cancel Button clicked.");
         }  	
      }		
   }
}

Скомпилируйте программу, используя командную строку. Идти кD:/ > SWING и введите следующую команду.

D:\AWT>javac com\tutorialspoint\gui\SwingControlDemo.java

Если ошибок не происходит, значит, компиляция прошла успешно. Запустите программу, используя следующую команду.

D:\AWT>java com.tutorialspoint.gui.SwingControlDemo

Проверьте следующий вывод.

Классы событий представляют событие. Java предоставляет различные классы событий, однако будут обсуждаться только наиболее часто используемые.

EventObject Класс

Это корневой класс, от которого должны происходить все объекты состояния события. Все события конструируются со ссылкой на объект,source, который логически считается объектом, на котором изначально произошло данное Событие. Этот класс определен вjava.util пакет.

Объявление класса

Ниже приводится декларация для java.util.EventObject класс -

public class EventObject
   extends Object
      implements Serializable

Поле

Ниже приведены поля для java.util.EventObject класс -

protected Object source - Объект, на котором изначально произошло Событие.

Конструкторы классов

Sr. No. Конструктор и описание
1

EventObject(Object source)

Создает прототип Event.

Методы класса

Sr. No. Метод и описание
1

Object getSource()

Объект, на котором изначально произошло Событие.

2

String toString()

Возвращает строковое представление этого объекта EventObject.

Унаследованные методы

Этот класс наследует методы от следующего класса -

  • java.lang.Object

Классы событий SWING

Ниже приведен список часто используемых классов событий.

Sr. No. Класс и описание
1 AWTEvent

Это корневой класс событий для всех событий SWING. Этот класс и его подклассы заменяют исходныйjava.awt.Event класс.

2 ActionEvent

ActionEvent генерируется при нажатии кнопки или двойном щелчке элемента списка.

3 InputEvent

Класс InputEvent - это корневой класс событий для всех входных событий на уровне компонентов.

4 KeyEvent

При вводе символа генерируется событие Key.

5 MouseEvent

Это событие указывает на то, что в компоненте произошло действие мыши.

6 WindowEvent

Объект этого класса представляет изменение состояния окна.

7 AdjustmentEvent

Объект этого класса представляет событие настройки, испускаемое объектами Adjustable.

8 ComponentEvent

Объект этого класса представляет изменение состояния окна.

9 ContainerEvent

Объект этого класса представляет изменение состояния окна.

10 MouseMotionEvent

Объект этого класса представляет изменение состояния окна.

11 PaintEvent

Объект этого класса представляет изменение состояния окна.

Слушатели событий представляют интерфейсы, отвечающие за обработку событий. Java предоставляет различные классы прослушивателей событий, однако мы будем обсуждать только те, которые используются чаще. Каждый метод метода прослушивателя событий имеет единственный аргумент в качестве объекта, который является подклассом класса EventObject. Например, методы прослушивателя событий мыши будут принимать экземпляр MouseEvent, где MouseEvent является производным от EventObject.

Интерфейс EventListner

Это интерфейс маркера, который должен расширять каждый интерфейс слушателя. Этот класс определен вjava.util пакет.

Объявление класса

Ниже приводится декларация для java.util.EventListener интерфейс -

public interface EventListener

Интерфейсы прослушивателя событий SWING

Ниже приводится список часто используемых прослушивателей событий.

Sr. No. Класс и описание
1 ActionListener

Этот интерфейс используется для получения событий действия.

2 ComponentListener

Этот интерфейс используется для получения событий компонента.

3 ItemListener

Этот интерфейс используется для получения событий элемента.

4 KeyListener

Этот интерфейс используется для получения ключевых событий.

5 MouseListener

Этот интерфейс используется для получения событий мыши.

6 WindowListener

Этот интерфейс используется для получения оконных событий.

7 AdjustmentListener

Этот интерфейс используется для получения событий настройки.

8 ContainerListener

Этот интерфейс используется для получения событий контейнера.

9 MouseMotionListener

Этот интерфейс используется для получения событий движения мыши.

10 FocusListener

Этот интерфейс используется для получения событий фокуса.

Адаптеры - это абстрактные классы для приема различных событий. Методы в этих классах пусты. Эти классы существуют для удобства создания объектов-слушателей.

Адаптеры SWING

Ниже приводится список наиболее часто используемых адаптеров при прослушивании событий графического интерфейса пользователя в SWING.

Sr. No. Адаптер и описание
1 FocusAdapter

Абстрактный класс адаптера для получения событий фокуса.

2 KeyAdapter

Абстрактный класс адаптера для получения ключевых событий.

3 MouseAdapter

Абстрактный класс адаптера для получения событий мыши.

4 MouseMotionAdapter

Абстрактный класс адаптера для получения событий движения мыши.

5 WindowAdapter

Абстрактный класс адаптера для получения оконных событий.

Макет относится к расположению компонентов внутри контейнера. Другими словами, можно сказать, что компоновка размещает компоненты в определенной позиции внутри контейнера. Диспетчер компоновки автоматически выполняет задачу размещения элементов управления.

Менеджер компоновки

Диспетчер компоновки автоматически размещает все компоненты внутри контейнера. Даже если вы не используете диспетчер макета, компоненты по-прежнему размещаются диспетчером макета по умолчанию. Элементы управления можно разложить вручную, однако это становится очень сложно по двум причинам.

  • Очень утомительно обрабатывать большое количество элементов управления внутри контейнера.

  • Обычно информация о ширине и высоте компонента не предоставляется, когда нам нужно их расположить.

Java предоставляет различные менеджеры компоновки для размещения элементов управления. Такие свойства, как размер, форма и расположение, варьируются от одного менеджера компоновки к другому. Когда размер апплета или окна приложения изменяется, размер, форма и расположение компонентов также изменяются в ответ, т. Е. Менеджеры компоновки адаптируются к размерам программы просмотра апплетов или окна приложения.

Диспетчер компоновки связан с каждым объектом-контейнером. Каждый диспетчер компоновки является объектом класса, реализующего интерфейс LayoutManager.

Ниже приведены интерфейсы, определяющие функциональные возможности менеджеров компоновки.

Sr. No. Интерфейс и описание
1 LayoutManager

Интерфейс LayoutManager объявляет те методы, которые должны быть реализованы классом, чей объект будет действовать как менеджер компоновки.

2 LayoutManager2

LayoutManager2 - это подчиненный интерфейс LayoutManager. Этот интерфейс предназначен для тех классов, которые знают, как размещать контейнеры на основе объекта ограничения макета.

Классы AWT Layout Manager

Ниже приводится список часто используемых элементов управления при разработке графического интерфейса пользователя с использованием AWT.

Sr. No. LayoutManager и описание
1 BorderLayout

Граница размещает компоненты так, чтобы они поместились в пяти регионах: восток, запад, север, юг и центр.

2 CardLayout

Объект CardLayout обрабатывает каждый компонент в контейнере как карту. Одновременно отображается только одна карта.

3 FlowLayout

FlowLayout - это макет по умолчанию. Он размещает компоненты в направленном потоке.

4 Макет сетки

GridLayout управляет компонентами в виде прямоугольной сетки.

5 GridBagLayout

Это самый гибкий класс менеджера компоновки. Объект GridBagLayout выравнивает компонент по вертикали, горизонтали или по их базовой линии, не требуя компонентов одинакового размера.

6 GroupLayout

GroupLayout иерархически группирует компоненты, чтобы разместить их в контейнере.

7 SpringLayout

SpringLayout позиционирует дочерние элементы связанного с ним контейнера в соответствии с набором ограничений.

Как мы знаем, с каждым окном верхнего уровня связана строка меню. Эта строка меню состоит из различных пунктов меню, доступных для конечного пользователя. Кроме того, каждый вариант содержит список параметров, который называется раскрывающимся меню. Элементы управления Menu и MenuItem являются подклассом класса MenuComponent.

Иерархия меню

Элементы управления меню

Sr. No. Класс и описание
1 JMenuBar

Объект JMenuBar связан с окном верхнего уровня.

2 JMenuItem

Пункты меню должны принадлежать JMenuItem или любому его подклассу.

3 JMenu

Объект JMenu - это компонент раскрывающегося меню, который отображается из строки меню.

4 JCheckboxMenuItem

JCheckboxMenuItem - это подкласс JMenuItem.

5 JRadioButtonMenuItem

JRadioButtonMenuItem - это подкласс JMenuItem.

6 JPopupMenu

JPopupMenu может динамически всплывать в указанной позиции внутри компонента.

Контейнеры являются неотъемлемой частью компонентов SWING GUI. Контейнер предоставляет пространство, где может быть расположен компонент. Контейнер в AWT - это сам по себе компонент, и он предоставляет возможность добавлять компонент к себе. Ниже приведены некоторые важные моменты, которые следует учитывать.

  • Подклассы Контейнера называются Контейнером. Например, JPanel, JFrame и JWindow.

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

  • В каждом контейнере присутствует макет по умолчанию, который можно переопределить с помощью setLayout метод.

SWING Контейнеры

Ниже приведен список наиболее часто используемых контейнеров при разработке графического интерфейса с использованием SWING.

Sr. No. Контейнер и описание
1 Панель

JPanel - самый простой контейнер. Он предоставляет пространство, в котором можно разместить любой другой компонент, включая другие панели.

2 Рамка

JFrame - это окно верхнего уровня с заголовком и рамкой.

3 Окно

Объект JWindow - это окно верхнего уровня без границ и без строки меню.