2016-11-26 6 views
3

私は、複数のユーザー入力を求める簡単なオプションペインを作成しています。私はラベルとテキストフィールドを指定しましたが、オプションペインの終わりには、変数には属さないテキストフィールドがあります。したがって、オプションペインを指定するときにそれが来ると推測しています。JOptionPane.showInputDialogのデフォルトのテキストフィールドを取り除くにはどうすればよいですか?

ここに私のコードです:

JTextField locationField = new JTextField(10); 
    JTextField usedByField = new JTextField(5); 
    JTextField commentField = new JTextField(50); 

    ... 

    myPanel.add(new JLabel("Location: "); 
    myPanel.add(locationField); 

    myPanel.add(new JLabel("Used By: "); 
    myPanel.add(usedByField); 

    myPanel.add(new JLabel("Comments: "); 
    myPanel.add(commentField); 

    ... 

    JOptionPane.showInputDialog(myPanel); 

私のダイアログは、このように見てしまい、浮遊テキストフィールドが私のペインの下部にあり、あなたが見ることができるように:

​​

私の質問では、私のコードでは、これを秘密裏に指定していますか?私は私だとは思わないので、私が必要としないこの迷子のテキストフィールドを取り除くためにどうやって行くのですか?

ありがとうございます。

答えて

4

解決策は簡単です:JOptionPane.showInputDialog(...)を使用しないでください。代わりにJOptionPane.showMessageDialog(...)を使用してください。

showInputDialogは、ユーザーからの単一のString入力を取得するために構築されているため、この目的のために埋め込みJTextFieldを表示するように構成されています。

一方、showMessageDialogはこれを実行せず、そのボタンのどれが押されたかによってintを返します。

詳しくは、JOptionPane APIをご覧ください。

編集:私は間違っていました。 「OK」、「キャンセル」、「はい」、「いいえ」などのダイアログ処理ボタンをダイアログに提供し、ユーザーがこれらのボタンを押してからボタンから入力できるようにするには、JOptionPane.showConfirmDialog(...)を使用します。例えば

final JTextField userNameField = new JTextField(10); 
final JPasswordField passwordField = new JPasswordField(10); 
JPanel pane = new JPanel(new GridBagLayout()); 
GridBagConstraints gbc = new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, 
     GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, 
     new Insets(2, 2, 2, 2), 0, 0); 
pane.add(new JLabel("User Name:"), gbc); 

gbc.gridy = 1; 
pane.add(new JLabel("Password:"), gbc); 

gbc.gridx = 1; 
gbc.gridy = 0; 
gbc.anchor = GridBagConstraints.EAST; 
pane.add(userNameField, gbc); 

gbc.gridy = 1; 
pane.add(passwordField, gbc); 

int reply = JOptionPane.showConfirmDialog(null, pane, "Please Log-In", 
     JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); 
if (reply == JOptionPane.OK_OPTION) { 
    // get user input 
    String userName = userNameField.getText(); 

    // ****** WARNING ****** 
    // ** The line below is unsafe code and makes a password potentially discoverable 
    String password = new String(passwordField.getPassword()); 

    System.out.println("user name: " + userName); 
    System.out.println("passowrd: " + password); 
} 

表示されます。

enter image description here

+0

恐ろしいが、ありがとうございました。私はそれをさらに見ていくつもりですが、今のところそれは私が望んでいたように働いています。 – juiceb0xk

+0

@ juiceb0xk:あなたは大歓迎です、幸運です! –

+0

@ juiceb0xk:私は間違っていた。編集をご覧ください。 –