Создание настраиваемой блокировки Java Swing

Эта проблема решена.

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

Текущая проблема требует вызова блокировки управления в приглашении пользователя. Аналогично JOptionPane.showConfirmDialog (). В этом случае статический вызов создает окно и останавливает поток программы до тех пор, пока пользователь не выберет опцию. Он также возвращает значение опции. Обратите внимание, что сам графический интерфейс не заблокирован логически, но пользователь не может взаимодействовать с остальным.

int n = JOptionPane.showConfirmDialog(this,
    "Are you sure?",
    "Confirm"
    JOptionPane.YES_NO_OPTION);

Я хотел бы продублировать эту функциональность с помощью настраиваемого внешнего вида и использования строки. В идеале мой код должен выглядеть следующим образом:

String result = CustomPrompt.showPrompt(this,
    "Please enter your name", //Text
    "Prompt.",                //Title
    "John Smith");            //Default

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

Рамка будет построена через NetBeans и настроена оттуда. Я понимаю, что такая подсказка уже существует в Swing, но ее внешний вид совершенно и совсем другой.

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

Решение этой проблемы заключается в следующем:

public class PromptForm extends JDialog
{
    transient char[] result;

    public char[] getResult()
    {
        return result;
    }
    public PromptForm(Frame parent)
    {
        super(parent, true);
        initComponents();
    }
    public void prompt()
    {
        this.setVisible(true);
    }
    public static char[] promptForPassword(Frame parent)
    {
        PromptForm pf = new PromptForm(parent);
        pf.prompt();
        return pf.getResult();
    }
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
    {
        result = jPasswordField1.getPassword();
        setVisible(false);
        dispose();
    }
    private void initComponents() {...}

    private javax.swing.JButton jButton1;
    private javax.swing.JPasswordField jPasswordField1;
}

Вызывается:

    char [] ret = PromptForm.promptForPassword(this);
    JOptionPane.showMessageDialog(this, new String(ret), "Neat", JOptionPane.QUESTION_MESSAGE);

Ответы на вопрос(1)

Ваш ответ на вопрос