2011-07-25 19 views
1

次のコードは離れないボタンを有していないから、ダイアログを示す:JOptionPane.showOptionDialogはボタンを表示しませんか?予想通り

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ビット)を示す:

enter image description here

なぜOK/Cancelボタンはありませんか?

答えて

2

(ところで、ダイアログはサイズ変更可能ではないので、彼らはちょうど可視フレームの外にある場合、私は知らない)

は(また、ダイアログを閉じていないEnterキーを押し、「x」は、ダイアログを閉じます)あなたの問題は入力配列にあります。 APIを読んで、それが違うはずだと伝えます。私は通常、Stringの配列を使用し、各StringはボタンStringを表します。また、ときどきObjectと混合コンポーネントとStringを混合して使用することもあります。たとえば、

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())); 
    } 
+0

十分に適切です。第2のパラメータとして 'passwdField'を使う代わりに動作します。 – Carsten

+0

@Carsten:返された結果(ここでは 'res'によって保持されます)をどうするかを決めるときに考慮する限り、順序は重要ではありません。 –

+0

'入力配列ではなく' showOptionDialog'の2番目のパラメータを意味します。 – Carsten

関連する問題