Эта проблема решена.
Я занимаюсь разработкой проекции на основе 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);