javafxプロパティの値を特定の範囲内に保つ最良の方法は何ですか?javafxプロパティにはどの値が決まりますか?
から
例1(またはJavaFXのプロパティで包まれた値をフィルタしないように何らかの理由を、既存の、この悪い習慣ですか?):IntegerProperty
例2の負の値を避ける:内IntegerPropertyの値を保ちますリストの境界
最初のアイデア: - オーバーライドIntegerPropertyBase.set(int)
。安全です?実際にはsetValue(int)
はset(int)
しか呼び出しませんが、この実装が1日変わった場合、値セットの制御が失われます。
第2のアイデア: - オーバーライドIntegerPropertyBase.invalidate()
。しかし、この時点ですでに価値が設定されていました。
IllegalArgumentException
(またはラップされた値が配列のインデックスである場合はArrayIndexOutOfBoundsException
)を投げた方がjavafxプロパティに適しているでしょうか、範囲外の値を拒否した方がよいでしょうか?たぶん、このような
:
class BoundedIntegerProperty extends IntegerPropertyBase {
(...)
int oldValue = defaultValueInBounds;
boolean settingOldValue = false;
public void invalidated() {
if(!settingOldValue){
if(outOfBounds(get())){
settingOldValue = true;
set(oldValue);
} else {
oldValue = get();
}
} else
settingOldValue = false;
}
}
のみ(無効化で例外を投げる)範囲外の値については、範囲外のプロパティの値を保持することができます。
値をフィルタリングするために提供されるjavafxプロパティで何かを見落としましたか?両方のあなたの例では
(必要であれば、...私はこのテキストの可能性の悪い英語を向上助けてください)
プロパティを設定する前に入力を検証する方が簡単かもしれません。テキストフィールド、DB結果、またはデータをファイルから検証します。私はこれを扱う良い方法が見当たりません。実際に#set()を呼び出して例外をスローしたいですか? –
あなたは本当です。たとえば、このリストにアクセスできないリストのインデックスを設定するのは意味がありません。しかし、私はリストにアクセスする場合、インデックスのプロパティのためのセッターは、リスト自体にある可能性があり、プロパティは読み取り専用です。リストでは、インデックスが境界外の場合、インデックスの設定者は例外をスローすることがあります。 –