0
public void testDialog()
    {
      JPanel myPanel = new JPanel();
      JTextField tfNames [] = new JTextField[getNumOfPlayers()];
      for(int i=0;i < getNumOfPlayers();i++)
      {
        tfNames[i] = new JTextField(20);
        myPanel.add(new JLabel("Player " + (i+1)));
        myPanel.add(tfNames[i]);
      }

      int result = JOptionPane.showConfirmDialog(null, myPanel,
               "Please Enter The Player Names", JOptionPane.OK_CANCEL_OPTION);

      playerNames = new String [getNumOfPlayers()];

       if(result == JOptionPane.OK_OPTION)
       {
            for(int i=0;i < getNumOfPlayers();i++)
            {
                if(tfNames[i].getText() == null)
                {
                    //NOT GETTING INSIDE HERE FOR ONE REASON OR ANOTHER
                    System.out.println("NULL FIELD" + i);
                    testDialog();
                }
                else
                {
                    playerNames[i] = tfNames[i].getText();
                    System.out.println(playerNames[i]);
                }
            }
       }
       else if (result == JOptionPane.CANCEL_OPTION)
       {
            numPlayersDialog();
       }
       else
       {
            numPlayersDialog();
       }
    }

基本的に、「OK」ボタンがクリックされたときに textFields の 1 つが空白であるかどうかを確認しようとしていますが、このメソッドを再度呼び出すかどうかを確認しようとしていますが、何らかの理由で、textField がnull であろうとなかろうと、null であっても毎回スキップします:/ 誰でも理由を説明できますか? それを理解しようとして1時間設定しましたが、その理由を見つけることができませんでした:/アドバイスをありがとう。

PS。1 つ以上の textFields が空白のときに [OK] ボタンを無効にできない場合は、お知らせください。

4

2 に答える 2

1

Because most likesly tfNames[i].getText() returns an empty string, not null.

Maybe you should check for that instead:

if(tfNames[i].getText() != null && tfNames[i].getText().isEmpty()){
     // ...
}
于 2013-03-23T18:30:22.950 に答える
1

That is because text will never be null, it will be empty so just change your check to :

if (tfNames[i].getText().isEmpty()) {

}

if using sdk lower than 1.6 than use the plain ole checking : tfNames[i].getText().equals("")

于 2013-03-23T18:30:43.590 に答える