2016-10-30 5 views
-2

JTextFieldのコードサンプルがあります。ユーザーがJTextFieldに詳細を入力せずに「登録」ボタンをクリックすると、そのユーザーに自分の間違いを知らせてもらいたい。このように:あなたは学生のミドルネームどのJTextFieldが空であるかを確認し、それらについてユーザーに通知する方法?

またはあなたが入力していない

学生住所

または

を入力していない

ますh入力された学生のミドルネームをaven'tと

なく

としてアドレスあなたは、私が情報をJLabelになりたいすべての詳細

が入力されていません。

また、空白の/は、/その背景/赤を赤に設定したいと考えています。

私は多くのコードを試しましたが、いずれも機能しませんでした。

ここに私のコードです。私は配列を使用してJTextField/sが空であるかどうかを確認しましたが、そのことについてユーザーに知らせる方法はわかりません。

public void checkEmpty() { 
    String fname = jTextField1.getText(); 
    String mname = jTextField2.getText(); 
    String lname = jTextField3.getText(); 

    String lineone = jTextField4.getText(); 
    String linetwo = jTextField5.getText(); 
    String linethree = jTextField6.getText(); 

    int fnam = fname.length(); 
    int mnam = mname.length(); 
    int lnam = lname.length(); 
    int lineon = lineone.length(); 
    int linetw = linetwo.length(); 
    int linethre = linethree.length(); 

    int[] check = {fnam, mnam, lnam, lineon, linetw, linethre}; 
    for (int i = 0; i < check.length; i++) { 
     if (check[i] == 0) { 

     } else { 

     } 
    } 
} 
+0

ユーザーインターフェイス https://i.stack.imgur.com/ZLG0T.jpg –

+0

ですさて、どこが上をユーザに通知するラベルはありますか? – user1803551

+0

@ user1803551変数名が "jLabel1"のjLabelがあるとしましょう。 私に解決策を教えてもらえますか? –

答えて

2

ここは簡単な例です。入力の長さを反復処理するのではなく、フィールド自体を反復処理します。空の場合は赤でペイントし、それに対応するメッセージをメッセージのリストに追加します。次に、そのリストをラベルに表示します。ここで

public class Main { 

    public static void main(String[] args) { 

     JTextField fName = new JTextField(); 
     fName.setName("First Name"); 
     JTextField lName = new JTextField(); 
     lName.setName("last Name"); 
     JTextField address = new JTextField(); 
     address.setName("Address"); 

     JTextField[] fields = new JTextField[] {fName, lName, address}; 

     StringBuilder sb = new StringBuilder("<html>"); 
     for (JTextField field : fields) { 
      if (field.getText().isEmpty()){ 
       field.setBackground(Color.RED); 
       sb.append("<p>").append("You haven't entered " + field.getName()); 
      } 
     } 

     JLabel label = new JLabel(sb.toString()); 
    } 
} 
+0

ありがとうございました:) –

+0

ここでfield.getName()はnullを出力します。この問題を克服するために、各jTextfieldに対応する異なる名前を使用できますか? –

+0

@CodeBae 'getName'は' setName'で設定されたものを返します。私の例を見てください。 – user1803551

1

エラーメッセージの配列を作成します。

String[] errors = 
{ 
    "First Name is missing", 
    "Middle Name is missing", 
    ... 
}; 

は、その後、あなたのループのコードであなただけの適切なメッセージのための配列を参照することができます。

for (int i = 0; i < textFields.length; i++) 
{ 
    JTextField textField = textFields[i]; 
    String text = textField.getText(); 
    int length = text.length(); 

    if (length == 0) 
    { 
     textArea.append(...); 
    } 
} 

:あなたも、あなたのループのコードは次のようになりようなものをあなたのコードを簡素化することで、テキストフィールドの配列を作成することができ

if (check[i] == 0) 
{ 
    textArea.append(errors[i]); 
} 

:あなたは複数のメッセージを持っている可能性があるので、あなたはJTextAreaのを使用する場合がありますループ/再利用可能なコードを作成してください。テストするために別のテキストフィールドを追加する必要がある場合は、メンテナンスが容易になります。

+0

本当に役に立ちましたし、完全なコードを教えてください。 @camickr –

+0

あなたが言ったように私はエラーメッセージの配列を探していました。しかし、いくつかのjTextフィールドが空でなくても、すべてのメッセージが表示されます。どうすれば解決できますか?ありがとう –

+1

コードをデバッグし、ロジックが正しく動作していない理由を理解してください。あなたがテストしている変数の値を表示しましたか?それがプログラミングのポイントです。ちょっとした問題に遭遇するたびに質問をすることは期待できません。 – camickr

関連する問題