私は使用しています:
String s = JOptionPane.showInputDialog(...);
質問に対するユーザーからの応答を取得する。ダイアログは、応答用のテキスト フィールドを表示するように設定されています。応答で使用できる文字を英数字と「_」のみに制限したいと思います。独自のカスタム ダイアログを最初から実装せずに、テキスト フィールドに DocumentFilter をインストールすることは可能ですか?
私は使用しています:
String s = JOptionPane.showInputDialog(...);
質問に対するユーザーからの応答を取得する。ダイアログは、応答用のテキスト フィールドを表示するように設定されています。応答で使用できる文字を英数字と「_」のみに制限したいと思います。独自のカスタム ダイアログを最初から実装せずに、テキスト フィールドに DocumentFilter をインストールすることは可能ですか?
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());
}
DocumentFilter をテキスト フィールド ドキュメントに直接追加する方法がわかりません。
別のアプローチについては、ダイアログの自動クローズの停止を参照してください。