2016-05-06 9 views
0

ユーザーが値を入力できるテキストフィールドがあります。ユーザー入力が途切れている

リスナーでは、新しい値を変数に格納します。その変数が数値であれば、その数値を出力します。例:

String val=""; 
textfield.textProperty().addListener(new ChangeListener<String>() { 
      public void changed(ObservableValue<? extends String> ov, 
       String old_val, String new_val) { 

        val=new_val; 

        if(val.matches("\\d+")) { 
         System.out.println(val); 
        } 
      } 
} 

複数桁の数字を入力しようとすると問題が発生します。私が10を試してみると、入力した最初の数字が11になります。これはifをトリガーしました。

私が値を印刷した後、それは残りのプログラムに送られ、ユーザー入力はもはや必要ありません。しかし、ユーザーはどのように2桁の数字を入力するのですか?私はスレッドをスリープ状態にしようとしましたが、すべてをスリープ状態にします。私は数字<10のためにフィルターを追加しようとしましたが、可能な2桁目を待つようになっていますが、待つことはできません。それは常に最初の桁で切り捨てられています。

お試しください。

答えて

0

はこれを使用します。

String val=""; 
textfield.textProperty().addListener(new ChangeListener<String>() { 
      public void changed(ObservableValue<? extends String> ov, 
       String old_val, 
       String new_val) { 

        val=new_val; 

        if(val.matches("\\d+"){1,2}) { 
         System.out.println(val); 
        } 
      } 
} 

それは今、有効な一致する1または2桁の数字を必要とします。

+0

まだ2桁だけではなく、1桁の入力が必要なので、問題はまだ発生します。 –

0

リスナーを変更するだけでは、あなたの要件を満たすことができないと思います。私の過去のプロジェクトで

、私は、ユーザーがEnterキーを提出することができますsubmitButton.setEnabled(isValidInput(val))

そしてframe.getRootPane().setDefaultButton(submitButton)をしました。

注:JFormattedTextFieldは、ユーザー入力を検証するためのより良い方法です。

関連する問題