Bir javafx Özelliğinin değerini belirli sınırlar içinde tutmanın en iyi yolu nedir?Bir javafx özelliğinde hangi değerlerin giderilebileceğini sınırla?
(Ya - bu kötü uygulama javafx özellikleri ile sarılmış değerleri filtrelemek asla bir sebep mevcut olduğunu?)
Örnek 1: Bir IntegerProperty
Example2 negatif değerler kaçının: içinde IntegerProperty değerini tutmak
Listesinin sınırları: İlk fikir: - geçersiz kılma IntegerPropertyBase.set(int)
. Güvenli? Aslında setValue(int)
sadece set(int)
'u çağırır, ancak - bu uygulama bir gün değişirse - değerler üzerindeki kontrol kaybolur.
İkinci fikir: - IntegerPropertyBase.invalidate()
geçersiz kılma. Ama bu noktada değer zaten belirlendi.
Javafx özelliklerine daha uygun olacaksa, IllegalArgumentException
(veya sarılmış değer dizinin indisiyse ArrayIndexOutOfBoundsException
) veya sınırları en son değere geri döndürerek değeri sonlandırın mı? Belki böyle
:
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;
}
}
Sadece sınırların dışında özelliğinin değerini tutabilir aut değerleri için geçersiz kılınan bir özel durum() at.
Filtre değerleri için sağlanan javafx özelliklerinde herhangi bir şeyi gözden kaçırdım mı?
hem örneklerde
Özelliği ayarlamadan önce girişi doğrulamak daha basit olabilir. metin alanını, DB sonucunu veya bir dosyadaki verileri doğrulayın. Bunu işlemek için iyi bir yol göremiyorum, gerçekten bir #set() çağrısının bir istisna atmasını ister misiniz? –
Doğru: Bu listeye erişimi olmayan bir liste için bir indeksi ayarlamak mantıklı değil. Ancak listeye erişimim varsa, indeks özelliği için ayarlayıcılar listenin kendisinde olabilir ve özellik yalnızca okunabilir. Listede, dizinin sınırlarının dışında olması durumunda dizinin ayarlayıcısı istisnalar atabilir. –