2

文字と数値の制限について 2 つの質問があります。フォーカスが失われたイベントをリッスンし、名前 (文字) と連絡先 (数値) の TextField を検証しています。

1.数値データを 3 桁未満に制限し、13 桁を超えないようにするにはどうすればよいですか。

以下は、数値用の連絡先 TextField のコーディングです。

private void txt_contactFocusLost(java.awt.event.FocusEvent evt) {
    if (txt_contact.getText().equals("")) {
    } else {
        String contact = txt_contact.getText();
        Pattern pt6 = Pattern
                .compile("^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]+$");
        Matcher mh6 = pt6.matcher(contact);
        boolean matchFound6 = mh6.matches();
        if (!(matchFound6)) {
            JOptionPane.showMessageDialog(null,
                    "* Enter the Numaric Values only *");
            txt_contact.setText("");
            txt_contact.requestFocus();
        }
    }
}

2.文字データを 3 文字未満に制限し、30 文字を超えないようにするにはどうすればよいですか。

private void txt_nameFocusLost(java.awt.event.FocusEvent evt) {
    if (txt_name.getText().equals("")) {
        error2.setText("Enter Full Name");
        txt_name.setText("");
    } else {
        String name = txt_name.getText();
        Pattern pt1 = Pattern.compile("^[a-zA-Z]+([\\s][a-zA-Z]+)*$");
        Matcher mh1 = pt1.matcher(name);
        boolean matchFound1 = mh1.matches();
        if (!(matchFound1)) {
            JOptionPane.showMessageDialog(null,
                    "* Enter the Character Values only *");
            txt_name.setText("");
            txt_name.requestFocus();
        } else {
            error2.setText("");
        }
    }
}
4

4 に答える 4

2

もっと簡単にできることがあります:

NumberFormat numF = NumberFormat.getNumberInstance(); 
numF.setMaximumIntegerDigits(13);
numF.setMinimumIntegerDigits(3);
JFormattedTextField THE_FIELD = new JFormattedTextField(numF);

(キャラクターも同じ考え)

これで、長さの範囲が指定された数値のみが許可されます。

詳しくは、NumberFormatJFormattedTextFieldをご覧ください。

于 2013-02-13T15:46:25.330 に答える
1

パターンでは、ステートメントを使用できます{n,m} n- to m- times

これにより、このようにパターンを構築できます

あなたの性格比較のために

Pattern pt6=Pattern.compile("[a-zA-Z]{3,30}"); // it says, it should be 3-30 non Digits

数字については

Pattern pt6=Pattern.compile("\\d{3,13}"); // it says, it should be 3-13 Digits
于 2013-02-13T15:44:32.443 に答える
0

私はこれを使用しています。非常にシンプルで簡単に必要なメソッドを使用するか、その両方を使用して、JTextField をパラメーターとして渡す必要がある場所を呼び出します...

public static void setNumericOnly(JTextField jTextField){
    jTextField.addKeyListener(new KeyAdapter() {
         public void keyTyped(KeyEvent e) {
           char c = e.getKeyChar();
           if ((!Character.isDigit(c) ||
              (c == KeyEvent.VK_BACK_SPACE) ||
              (c == KeyEvent.VK_DELETE))) {
                e.consume();
              }
         }
    });
}

public static void setCharacterOnly(JTextField jTextField){
    jTextField.addKeyListener(new KeyAdapter() {
         public void keyTyped(KeyEvent e) {
           char c = e.getKeyChar();
           if ((Character.isDigit(c) ||
              (c == KeyEvent.VK_BACK_SPACE) ||
              (c == KeyEvent.VK_DELETE))) {
                e.consume();
              }
         }
    });
}
于 2015-11-19T05:06:07.670 に答える
0

文字列用

public boolean validateString(String data){
        char [] chars = data.toCharArray();
        if(chars.length < 3 || chars.length >13)
            return false;
        return true;
}

番号の場合

public boolean validateNumber(int number){
        String data = number+"";
        return validateString(data);    
}
于 2013-02-13T15:42:36.297 に答える