Установите DocumentFilter на JOptionPane

Я использую:

String s = JOptionPane.showInputDialog(...);

получить ответ от пользователя на вопрос; диалоговое окно настроено для отображения текстового поля для ответа. Я хотел бы ограничить символы, разрешенные в ответе, только буквенно-цифровыми и «_». Можно ли установить DocumentFilter в текстовое поле без реализации моего собственного диалогового окна с нуля?


person Paul Carlisle    schedule 11.02.2013    source источник
comment
Возможный дубликат: stackoverflow .com/questions/4684914/   -  person Boris Pavlović    schedule 11.02.2013


Ответы (2)


Доступ к автоматически созданному текстовому полю JOptionPane теоретически возможен, но ИМХО это неправильный путь.

Вот лучшее решение: JOptionPane имеет скрытую функцию: он также принимает компоненты Swing в качестве сообщений. Поэтому вам нужно создать панель с меткой и текстовым полем (с вашим DocumentFilter) и передать ее в диалоговое окно подтверждения. После подтверждения вы можете прочитать текст из вашего текстового поля.

Вот образец:

JPanel p = new JPanel(new FlowLayout());
JTextField fld = new JTextField(10);
// set document filter for 'fld' here
p.add(new JLabel("Enter text: "));
p.add(fld);
int val = JOptionPane.showConfirmDialog(null, p, "Test", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null);
if (JOptionPane.OK_OPTION == val) {
  System.out.println("Text: "  + fld.getText());
}
person Sergiy Medvynskyy    schedule 11.02.2013
comment
Я не знаю о скрытом, так как я почти уверен, что он есть в документах, большинство людей просто не замечают его;)... +1 - person MadProgrammer; 11.02.2013

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

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

person camickr    schedule 11.02.2013