0

設計は非常に単純ですが、自分が作成したJavaクラスを実行しているときに小さな問題が発生しました。JPanelを作成し、それに4つのJTextFieldを追加し、このJPanelにもボタンを追加しました。次に、押されているこのボタンにActionListenerを関連付けました。コードは次のようなものです。

okButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) 
    {
       if (imageIdField.getText() == "" && 
           captionField.getText() == "" &&
           creditField.getText() == "" &&
           titleField.getText()== "") 
           {
              mediaXML = "";                        
              results.clear();
              results.put("error1", "more");

           } 
           else
           { ....
           }
    }

奇妙なことに、[OK]ボタンを押して、これら4つのJTextFieldにテキストを入力しましたが、これら4つのフィールドのいずれにもテキストを入力しなかったかのようにIFブランチに分類されます。私はこれをしばらくデバッグしてきましたが、手がかりはありません。.getText()== ""が入力なしをテストするための有効な方法であるかどうかのようなヒントを誰かに教えてもらえますか?

前もって感謝します!

4

6 に答える 6

3

すでに述べたように、使用==は正しくありません。読みやすくするために、次を試してください。

field.getText().isEmpty()

また

field.getText().trim().isEmpty()
于 2010-12-13T16:19:58.300 に答える
1

一般的に、 s、または他のほとんどのものに使用==するのは悪い考えです。Stringオブジェクトがまったく同じインスタンスであるかどうかをチェックしますが、同じ値を持っているかどうかはチェックしません。"" != new String("")

field.getText().equals("")

またはおそらくより良い:

field.getText().isEmpty()
于 2010-12-13T16:15:54.833 に答える
1

getText().equals("")の代わりに使用==

于 2010-12-13T16:16:25.390 に答える
1

==を使用して、メモリ内の同じオブジェクトであるかどうかを確認し、.equals( "YOUR STRING")を使用して、オブジェクトのコンテンツが同じであるかどうかを確認します。

于 2010-12-13T16:18:08.313 に答える
1

.equalsを使用する必要があります。また、次のようなことを行うこともできます。

imageField.getText().trim().length() == 0  //The same for the others

また

imageField.getText().trim().isEmpty() //The same for the others

ユーザーが空白だけでなく実際にいくつかの文字を書いたことを確認したい場合。

于 2010-12-13T16:19:46.237 に答える
1

==左側と右側がオブジェクトのまったく同じインスタンスを参照しているかどうかのみをチェックします。また、""はのようなものに変換されるためnew String("")、既存の文字列と比較すると、常にfalseが返されます。

クラスの2つのインスタンスが同じ状態であるかどうかを比較する場合は、を使用する必要がありますequals()。あなたの場合*.getText().equals("")。より洗練されたisEmpty()メソッドは、Stringクラスのメソッドを使用することです。

于 2010-12-13T16:24:05.890 に答える