Как создавать диалоговые окна в Java

133
технологии 28.webp

Последнее обновление 10.01.2023 — Василий Иванов

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

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

Java — это разнообразный язык, который предоставляет несколько классов для создания диалоговых окон. Эти классы включают JOptionPane, JDialog и JFrame.

Класс JOptionPane

Вы можете создать стандартное диалоговое окно, используя один из нескольких статических методов, принадлежащих классу JOptionPane. Это включает:

  • showMessageDialog(), который передает сообщение пользователю.
  • showConfirmDialog(), который задает вопрос, требующий подтверждения.
  • showInputDialog(), который предлагает пользователю ввести данные.
  • showOptionDialog(), представляющий собой комбинацию трех других методов.
По теме:  Как исправить «Запуск от имени администратора», который не работает в Windows

Создание диалогового окна JOptionPane

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class JOptionPaneApp {
JOptionPaneApp() {
JFrame frame = new JFrame();
JOptionPane.showMessageDialog(frame, "This is a JOptionPane message window.");
}

public static void main(String[] args) {
new JOptionPaneApp();
}
}

Приведенный выше код создает следующее диалоговое окно:

Хотя JOptionPane предоставляет стандартные диалоговые окна, у него есть много опций, позволяющих настроить его поведение. Например, диалоговое окно сообщения может принимать один из нескольких типов. Приведенный выше пример INFORMATION_MESSAGE, который используется по умолчанию. Другие типы сообщений:

  • СООБЩЕНИЕ ОБ ОШИБКЕ
  • ПРЕДУПРЕЖДЕНИЕ
  • QUESTION_MESSAGE
  • PLAIN_MESSAGE

Создание сообщения об ошибке

Вот пример того, как использовать другой тип сообщения для диалогового окна JOptionPane:

JOptionPane.showMessageDialog(frame, "This is a JOptionPane error message window.",
"Error", JOptionPane.ERROR_MESSAGE);

Замените строку showMessageDialog() в исходной программе строкой кода выше, и вы увидите следующее диалоговое окно с ошибкой:

Класс JDialog

Класс JDialog позволяет создавать настраиваемые диалоговые окна. Этот класс Java принадлежит пакету javax.swing и расширяет класс Dialog. Он имеет доступ к широкому спектру прямых и косвенных методов. Этот класс Java имеет в общей сложности 16 конструкторов Java.

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

Основные конструкторы JDialog включают:

  • JDialog() создает диалоговое окно без рамки, заголовка или режима.
  • JDialog (владелец диалогового окна, заголовок строки, логическое модальное значение) создает диалоговое окно с владельцем диалогового окна, заголовком строки и режимом.
  • JDialog (владелец фрейма, заголовок строки, логическое модальное) создает диалоговое окно с владельцем фрейма, заголовком строки и режимом.
  • JDialog (владелец окна, заголовок строки, логическое модальное значение) создает диалоговое окно с владельцем окна, заголовком строки и режимом.

Создание диалогового окна JDialog

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.WindowConstants;

public class JDialogApp {
JDialogApp() {
JFrame frame = new JFrame();
JDialog dialog = new JDialog(frame, true);
dialog.setLayout(new FlowLayout());

JLabel displayText = new JLabel("This is a JDialog window.");
JButton btn = new JButton("OK");

btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dialog.setVisible(false);
}
});

dialog.add(displayText);
dialog.add(btn);

dialog.setSize(200,150);
dialog.setTitle("Dialog Window");
dialog.setVisible(true);
dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}

public static void main(String args[]) {
new JDialogApp();
}
}

Приведенный выше код создает следующее диалоговое окно:

Следует отметить несколько важных аспектов кода. Программа использует конструктор JDialog (владелец фрейма, булев модальный), которому она передает JFrame и «истинное» значение в качестве аргументов. JFrame является владельцем JDialog, что означает, что он отвечает за отображение диалогового окна. Значение «истина» означает, что диалоговое окно блокирует ввод в другие связанные окна, когда оно отображается.

Конструктор в приведенном выше коде не принимает заголовок в качестве аргумента. Однако владельцу фрейма нужен титул. Итак, для этой задачи вы можете использовать метод setTitle(), который доступен через класс Dialog, расширяемый JDialog. Другими важными методами кода являются setVisible(), setSize() и setDefaultCloseOperation().

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

Класс JFrame

JDialog и JOptionPane используют класс JFrame для создания диалоговых окон. Однако класс JFrame может создавать диалоговые окна самостоятельно. Класс JFrame расширяет класс Frame и, как и класс JDialog, позволяет создавать настраиваемые диалоговые окна.

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

Создание диалогового окна JFrame

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class JFrameApp {
JFrameApp() {
JFrame frame = new JFrame();
frame.setTitle("Dialog Window");
JPanel panel = new JPanel();

JLabel displayText = new JLabel("This is a JFrame window.");
panel.add(displayText);
JButton btn = new JButton("OK Button");

btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.setVisible(false);
}
});

panel.add(btn);

frame.add(panel);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(250, 150);
frame.setVisible(true);
}

public static void main(String[] args) {
new JFrameApp();
}
}

Приведенный выше код создает следующее диалоговое окно:

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

Методы ActionListener() и actionPerformed() обрабатывают событие нажатия пользователем кнопки OK.

Какой класс Java лучше всего подходит для создания диалоговых окон?

Единственная цель класса JOptionPane — сделать процесс создания диалогового окна более удобным для Java-разработчиков. Однако, если вам нужно более индивидуальное диалоговое окно, класс JDialog является следующим лучшим вариантом.

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

Диалоговое окно, созданное с помощью класса JFrame, имеет свернутый значок, а другие — нет. Если вам нужно модальное диалоговое окно, в котором пользователь должен действовать перед выполнением задачи, то JFrame — не лучший подход.