1

次のコードは、ボタンがないことを除けば、期待どおりのダイアログを示しています。

  final JPasswordField passwdField = new JPasswordField();
  passwdField.setColumns(20);
  final JComponent[] inputs = new JComponent[] {  passwdField };
  int res = JOptionPane.showOptionDialog(null, "Enter Password", "Login", 
                  JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, 
                  null, inputs, "");

次のダイアログを表示します(Java 6.2?、Windows 7 64ビット):

ここに画像の説明を入力してください

OK /キャンセルボタンがないのはなぜですか?(ところで、ダイアログはサイズ変更できないので、表示されているフレームのすぐ外側にあるかどうかはわかりません)

(また、Enterキーを押してもダイアログは閉じません。「x」を押すとダイアログが閉じます)

4

1 に答える 1

2

問題は入力配列にあります。APIを読むと、それが異なるはずであることがわかります。私は通常、文字列の配列を使用します。各文字列はボタンの文字列を表します。または、オブジェクトの混合、コンポーネントと文字列の混合を使用することもあります。たとえば、

  JPasswordField passField = new JPasswordField(10);
  Object[] inputs = {passField, "OK", "Cancel"};
  int res = JOptionPane.showOptionDialog(null, "Enter Password", "Login", 
           JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, 
           null, inputs, "");
  if (res == 1) {
     System.out.println("Password is: " + new String(passField.getPassword()));
  }
于 2011-07-25T01:57:09.627 に答える