1

ユーザーが文字をテキストボックスに入力するたびに、それが数字であるかどうかを確認しようとしています。そうでない場合は、すぐにテキストボックスから削除する必要があります。

何が起こるかというと、数字の 1 (または任意の数字または文字) を入力すると、明らかに数字である場合にテキスト ボックスから値が削除されます。

私が使用しているイベントは次のとおりです。

private void txtLengthAKeyReleased(java.awt.event.KeyEvent evt) {
    removeLastChar(txtLengthA); //pass the textbox 
}

removeLastChar() メソッドは次のとおりです。

public static void removeLastChar(JTextField txt)
{
    //Get string from text field
    String str = txt.getText();
    //Make sure length > 0
    if( (str.length()) != 0)
    {
        //Get the last char of the string
        String s = str.substring(str.length()-1, str.length()-1);
        System.out.println(s);   //test debug
        //If not numeric (try/catch Double.parseDouble)
        if(!isNumeric(s));
        {
            //Remove last char from the text box
            str = str.substring(0, str.length()-1);
            txt.setText(str);
        }
    }
}

文字列が数値かどうかを確認します。

isNumeric() function:
    public static boolean isNumeric(String str)  
    {  
      try  
      {  
        double d = Double.parseDouble(str);  
      }  
      catch(NumberFormatException nfe)  
      {  
        return false;  
      }  
      return true;  
    }
4

3 に答える 3

1

を使用KeyListenersしてフィルタリングまたは変更することJTextComponetsは、涙で終わるだけです。

あなたはDocumentFilter

Limit the Characters in the text field using document listner、Deleting last keystroke in JTextField if invalid、およびJTextField が文字数の入力を制限し、例としてのみ数値を受け入れる(特に最後の質問の回答からのリンク) を確認してください。

于 2012-10-22T06:08:59.770 に答える
1

ユーザーがテキスト フィールドの中央に数字以外の文字を入力するとどうなりますか? それとも序盤?

DocumentFilter を使用してより良いソリューションを実装できます: http://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html#filter

挿入または置換される文字列が有効であることが確実な場合は、super.insert... を呼び出す必要があります。(あなたの場合は数値)。

于 2012-10-22T06:12:25.377 に答える
0

そのはず

        String s = str.substring(str.length()-1, str.length();

あなたのコードでは、の値sは常に空の文字列です。

単一の文字が数字かどうかをテストするには、次を使用します

Character.isDigit(str.substring(0,1))
于 2012-10-22T05:48:40.463 に答える