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 - это окно верхнего уровня без границ и без строки меню. |