3

JFrameに2つのテキストフィールドがあり、textfield1からフォーカスが失われたときにtextfield1のデータを検証したいと思います。そのため、このメソッドをFocusListener使用して使用しました。これにより、フォーカスがtextfield1に戻ります。textfield1以外のJFrameウィンドウ内のコンポーネントをクリックすると正常に機能しますが、JFrameウィンドウ外の任意の場所をクリックすると、が2回呼び出され、フォーカスがtextfield2に移動しますが、フォーカスはtextfield1のままになります。showMessageDialog()FocusLost()showMessageDialog()

    @Override
    public void focusGained(FocusEvent e) {}

    @Override
    public void focusLost(FocusEvent e) {
        boolean show = false;
        String theRegex = "[0-9]";
        Pattern checkRegex = Pattern.compile(theRegex);
        Matcher regexMatcher = checkRegex.matcher( MemberID );
        while ( !regexMatcher.find() && show==false){
            JOptionPane.showMessageDialog(null,"Please enter numbers","Validation Error",JOptionPane.ERROR_MESSAGE);
            MemberID_Text.requestFocusInWindow();
    MemberID_Text.selectAll();
            show = true;

        }

    }
4

1 に答える 1

0

これを行うと、数値が入力されているかどうかを確認し、正規表現をすべて回避できます

     class IntVerifier extends InputVerifier {

  @Override public boolean verify(JComponent input) {
      String text =((JTextField) input).getText();
      int n = 0; 

          try {
      n = Integer.parseInt(text); } 

      catch (NumberFormatException e) {
  return false; 
       }

  return true;
      }
      }

次に、テキストフィールドで入力検証を使用します

 IntVerifier intv = new IntVerifier();      
 myTextField = new JTextField();
 myTextField.setInputVerifier(intv);
于 2012-11-13T13:54:09.117 に答える