2017-01-13 7 views
0

私はしかし JFormattedTextFieldは、受け入れ値[0.1、100]、数字

public AbstractFormatter getFormatter(JFormattedTextField tf) { 
    NumberFormat f = DecimalFormat.getInstance(); 
    f.setMinimumFractionDigits(1); 
    f.setMaximumFractionDigits(2); 
    InternationalFormatter iff= new InternationalFormatter(f); 
    iff.setAllowsInvalid(false); 
    iff.setMinimum(0.1); 
    iff.setMaximum(100.00); 
    return iff; 
} 

のAbstractFormatter

を使用して、[0.1、100]にJFormatdedTextField内部の入力値を制限しようとしていますの不快な書き込みは、抽象フォーマッタは奇妙なを持っています動作。インターバル内に以下の数字を書きたいとします:0.2。

抽象フォーマッタブロックの最初の桁:0. 2つの段階で0.2を書き込む必要がある:

a] 1.2 //or any digit > 0 
b] delete 1: 1.2->0.2 

このような現象は混乱ユーザのためのものです。この数字の不快な書き込みを防ぐ方法はありますか?

ありがとうございました。

+1

これはうまくいかないためです。あなたは弾丸を噛むだけで、最小値として0を選択しなければならないかもしれません。 0が挿入されたら、入力をもう一度尋ねます... –

+1

どちらか、それ自身の 'InputVerifier'クラスを作り、それを代わりに使用してください。 – markspace

答えて

1

私は何が必要なのJSPinnerであることを考える:

JSpinner spin = new JSpinner(new SpinnerNumberModel(50 /*or whatever*/, 0.1, 100, 0.1)); 

またはあなただけの紛らわしい行動を取り除くためにライン

iff.setAllowsInvalid(false); 

を削除することができます。この方法のJavadocは言う:編集中の値は、時間の長さ 無効であることが許可されているか否か

セット(つまり、のstringToValueにはParseExceptionがスローされます)。 無効な値を一時的に入力させると便利なことがよくあります。

これらは、値が無効で以前の有効な値に戻される場合、コンポーネントから離れるようになります。フォーカスを失わないようにするには、コメントに記載されているように入力ベリファイアを使用します。 Javadocには、JFormattedTextFieldの例があります。http://docs.oracle.com/javase/8/docs/api/javax/swing/JFormattedTextField.html

関連する問題