Java - Как создать пользовательское диалоговое окно?
-
16-09-2019 - |
Вопрос
У меня есть кнопка на JFrame, при нажатии на которую я хочу, чтобы всплывало диалоговое окно с несколькими текстовыми областями для ввода пользователем.Я осматривал все вокруг, пытаясь понять, как это сделать, но я продолжаю все больше запутываться.Кто-нибудь может помочь?
Решение
Если вам не нужно многого в плане пользовательского поведения, JOptionPane - хорошая экономия времени.Он заботится о размещении и локализации опций OK / Cancel и представляет собой быстрый способ отображения пользовательского диалогового окна без необходимости определять ваши собственные классы.В большинстве случаев параметр "message" в JOptionPane представляет собой строку, но вы также можете передать JComponent или массив JComponents.
Пример:
JTextField firstName = new JTextField();
JTextField lastName = new JTextField();
JPasswordField password = new JPasswordField();
final JComponent[] inputs = new JComponent[] {
new JLabel("First"),
firstName,
new JLabel("Last"),
lastName,
new JLabel("Password"),
password
};
int result = JOptionPane.showConfirmDialog(null, inputs, "My custom dialog", JOptionPane.PLAIN_MESSAGE);
if (result == JOptionPane.OK_OPTION) {
System.out.println("You entered " +
firstName.getText() + ", " +
lastName.getText() + ", " +
password.getText());
} else {
System.out.println("User canceled / closed the dialog, result = " + result);
}
Другие советы
Попробуйте этот простой класс для настройки диалогового окна по своему вкусу:
import java.util.ArrayList;
import java.util.List;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JRootPane;
public class CustomDialog
{
private List<JComponent> components;
private String title;
private int messageType;
private JRootPane rootPane;
private String[] options;
private int optionIndex;
public CustomDialog()
{
components = new ArrayList<>();
setTitle("Custom dialog");
setMessageType(JOptionPane.PLAIN_MESSAGE);
setRootPane(null);
setOptions(new String[] { "OK", "Cancel" });
setOptionSelection(0);
}
public void setTitle(String title)
{
this.title = title;
}
public void setMessageType(int messageType)
{
this.messageType = messageType;
}
public void addComponent(JComponent component)
{
components.add(component);
}
public void addMessageText(String messageText)
{
JLabel label = new JLabel("<html>" + messageText + "</html>");
components.add(label);
}
public void setRootPane(JRootPane rootPane)
{
this.rootPane = rootPane;
}
public void setOptions(String[] options)
{
this.options = options;
}
public void setOptionSelection(int optionIndex)
{
this.optionIndex = optionIndex;
}
public int show()
{
int optionType = JOptionPane.OK_CANCEL_OPTION;
Object optionSelection = null;
if(options.length != 0)
{
optionSelection = options[optionIndex];
}
int selection = JOptionPane.showOptionDialog(rootPane,
components.toArray(), title, optionType, messageType, null,
options, optionSelection);
return selection;
}
public static String getLineBreak()
{
return "<br>";
}
}
Этот урок в руководстве по Java подробно объясняется каждый компонент Swing с примерами и ссылками на API.
Если вы используете Среда разработки NetBeans (последняя версия на данный момент - 6.5.1), вы можете использовать его для создания базового java-приложения с графическим интерфейсом, используя File-> New Project и выберите категорию Java, затем Java Desktop Application.
После создания у вас будет простое графическое приложение с графическим интерфейсом, которое содержит окно "О программе", которое можно открыть с помощью выбора в меню.Вы должны быть в состоянии адаптировать это к вашим потребностям и научиться открывать диалоговое окно одним нажатием кнопки.
Вы сможете визуально отредактировать диалоговое окно.Удалите имеющиеся там элементы и добавьте несколько текстовых областей.Поиграйте с этим и возвращайтесь с новыми вопросами, если вы застряли :)
Ну, по сути, вы создаете JDialog, добавляете свои текстовые компоненты и делаете его видимым.Это может помочь, если вы сузите круг вопросов, с каким конкретным битом у вас возникли проблемы.
я создал пользовательский диалоговый API.проверьте это здесь https://github.com/MarkMyWord03/CustomDialog.Он поддерживает сообщение и окно подтверждения.скоро будет реализован диалог ввода и настройки, как в joptionpane.
Пример диалогового окна с ошибкой из CustomDialog API:Сообщение об ошибке пользовательского каталога