Java - Как создать собственное диалоговое окно? - PullRequest
42 голосов
/ 25 апреля 2009

У меня есть кнопка на JFrame, при нажатии которой я хочу всплывающее диалоговое окно с несколькими текстовыми областями для ввода пользователем. Я искал все вокруг, чтобы попытаться понять, как это сделать, но я все больше запутываюсь. Кто-нибудь может помочь?

Ответы [ 6 ]

80 голосов
/ 26 апреля 2009

Если вам не нужно много способов пользовательского поведения, JOptionPane поможет вам сэкономить время. Он заботится о размещении и локализации параметров OK / Cancel и является быстрым и грязным способом показа настраиваемого диалогового окна без необходимости определять свои собственные классы. В большинстве случаев параметр «message» в JOptionPane является String, но вы также можете передать 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);
}
3 голосов
/ 02 февраля 2015

Попробуйте этот простой класс для настройки диалога по своему вкусу:

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>";
    }
}
1 голос
/ 19 января 2017

Я создал пользовательский диалог API. проверьте это здесь https://github.com/MarkMyWord03/CustomDialog. Это поддерживает сообщение и окно подтверждения. диалог ввода и выбора параметров, как и в joptionpane, скоро будет реализован

Пример диалога ошибок из API CUstomDialog: CustomDialog Сообщение об ошибке

1 голос
/ 26 апреля 2009

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

1 голос
/ 25 апреля 2009

Если вы используете NetBeans IDE (последняя версия на данный момент - 6.5.1), вы можете использовать его для создания базового Java-приложения с графическим интерфейсом, используя File-> New Project и затем выберите категорию Java Настольное приложение Java.

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

Вы сможете редактировать диалог визуально. Удалите элементы, которые там есть, и добавьте несколько текстовых областей. Поиграйте с ним и вернитесь с дополнительными вопросами, если вы застряли:)

1 голос
/ 25 апреля 2009

Этот урок из учебного руководства по Java подробно объясняет каждый компонент Swing с примерами и ссылками на API.

...