2016-07-26 8 views
0

皆、私はインタラクティブなグラフィカルユーザーインターフェイスプログラムを作成しています。基本的には、すべての入力を受け入れ、下のTextAreaに関する情報を表示します。空でもnullでもあれば、すべての入力を検証します。 私の質問は、たとえば、ファーストネームが空であることです、どのようにテキストフィールド(ファーストネームフィールド)でループバックできますか?さらに進まずにもう一度再入力しますか?JavaでJTextFieldの入力を検証する方法

私はdo-while文を使用していたが、私は飛び出すするためのJOptionPaneのウィンドウを使用する場合にのみ動作します。私は私の質問を明確にしましょう:私は最初の名前フィールドがnullまたは空の場合、ユーザーは、私が「JOPtionPane.showmessageDialog」ウィンドウが おかげ

に出たくない代わりに、ウィンドウのテキストフィールドから再び再入力する必要があるということである欲しいです

画像は、この方法を試してみてくださいここ

graphic interface

do while loop

do{ 
     whetherContinue=true; 

     FName=TxtFname.getText(); 
     if(TxtFname.getText().isEmpty()){ 
      FName = JOptionPane.showInputDialog("Please type your First Name"); 
      TxtFname.setText(FName); 
     } 
     else{ 

     } 
     if (FName==null) 
      System.exit(1); 
    try{ 
     if (FName.isEmpty()) 
      throw new ArithmeticException("First name can not be empty!"); 
     whetherContinue = false; 
    }catch (Exception ex) 
    { 
     JOptionPane.showMessageDialog(null,"The first name can not be empty! Please type again"); 
    } 
    }while(whetherContinue); //First Name while 
+1

バックと同じ構成要素に行くよりも、空である私は、あなたが明確化できるテキストですチェック空の入力問題 ためのフォーカスのリスナーを試しますあなたの質問 ? –

+0

簡単なサーフィンのためにここにコードと画像を直接掲載してください。このフォームで –

+1

質問はよくある質問、ここで混乱して申し訳ありませんMCVE – mKorbel

答えて

0

である彼らはタイプとして、それは非数値文字を入力するからユーザーを防ぐことができます。

JTextField textField = new JTextField(10); 
textField.addKeyListener(new KeyAdapter() { 
    public void keyTyped(KeyEvent e) { 
     char c = e.getKeyChar(); 
     if (((c < '0') || (c > '9')) && (c != KeyEvent.VK_BACK_SPACE)) { 
     e.consume(); // ignore event 
     } 
    } 
}); 

をこのアプローチに基づいて、あなたが欲しいの文字を行うことができます。 あなたは数字を取っている場合は、このように、キーボードからのユーザーの入力をキャプチャします。

ORこのように、JFormattedTextFieldはとあなたのJTextFieldを変更します。ここでは

try { 
    MaskFormatter mascara = new MaskFormatter("##.##"); 
    JFormattedTextField textField = new JFormattedTextField(mascara); 
    textField.setValue(new Float("12.34")); 
} catch (Exception e) { 
    ... 
} 

は、同様に他のアプローチとreferenceです。

+0

カスタム[DocumentFilter(https://docs.oracle.com/javase/7/docs/api/javax/swing/text/DocumentFilter.html)または[のJFormattedTextField(https://docs.oracleの使用を検討.COM /のJava SE/8 /ドキュメント/ API/javaxの/スイング/ JFormattedTextField.html) - のKeyListenerは非常に真でペーストアクションおよび/またはDND – copeg

+0

のようなものを処理しませんが、私は多分、他のアプローチ –

+0

との参照を追加しましたIだろうそこにそれを加えなければなりません。 –

0

フォーカスがコンポーネントから失われたとき、それはテキストがのrequestFocusメソッド

FocusListener focus_event = new FocusListener() { 

      @Override 
      public void focusLost(FocusEvent arg0) { 
       if(textField.getText().isEmpty()) 
       { 
        JOptionPane.showConfirmDialog(null, "Please enter","erruer",JOptionPane.ERROR_MESSAGE); 
        textField.requestFocus(); 
       } 
      } 

      @Override 
      public void focusGained(FocusEvent arg0) { 
       // TODO Auto-generated method stub 

      } 
     }; 
     textField.addFocusListener(focus_event); 
関連する問題