0

Javafx Properties & Bindings Part-2

Javafx Properties & Bindings yazısının ikinci bölümünden devam edelim. Birinci bölümü okumadan bu bölüme geçmenizi tavsiye etmem eğer okumadıysanız part-1 kısmını mutlaka okuyun.

JAVAFX  JavaBean

Yazının üst kısımlarında Java Bean düzeninden bahsetmiştik şimdi javafx javaBean dan bahsedelim ve nasıl alanlar oluşturulur buna bakalım.Bu örneğimizde readOnly bir property kullanacağız ta ki readOnly property’nin davranışlarını görmüş olalım.

örneğimize dikkat edersek ReadOnlyStringWrapper ‘in read/write özellikli olduğunu , ReadOnlyStringProperty ise set metodu olmadığını görürür. açıklamalara kod arasına yazdım. 

Constructorda şu şekilde tanınmalama yapılmasının sebebi olarak ; 

property’lere change listener eklerken bean nesnesine erişim gerekebiliyor o yüzden bu şekilde constructor tanımlanmış.

Property  Change Desteği

Property’lerin change desteginin olması property de herhangi bir değişiklik meydana geldiğinde bu değişikliği yakalamayı sağlıyor. Aynen butona basma olayının yakalanması gibi.. Javafx Objelerinin addListener() diye bir metodu var. Bu metod iki tane Functional Interface ‘i parametre olarak alabiliyor. Bunlar ChangeListener ve Invalidationlistener. Dolayısıyla bunları lambda Expression ile kullanabiliyorsunuz anlamına da geliyor. 

Javafx deki tüm property’lerin dedeleri ObservableValue ve Observable interfacesidir. 

resimleri incelerseniz bunların addListener() diye bir metodu var ve bu metodlar ChangeListener , ve InvalidationListener diye iki parametrede alıyor. Tabi burada removeListener() da ilgilimiz çekiyor. Oluşturduğumuz listener’larla işimiz bitince bunları hafızadan temizlemek de önemli bir nokta , removeListener ile bu listener’ları kaldırabiliyoruz. 

Şimdi kodumuzun içinde bu durumu nasıl örnekleriz buna bakalım . Örneğimizde read/writable bir StringProperty Oluşturacağız ve bu proprety’ e hem anonim inner class olarak, hemde lambda kullanarak bir change listener ekleyeceğiz. 

Şimdi de InvalidationListener nasıl oluşturulur buna bakalım. Property’mizin değeri değiştiğinde invalidated() metodu tetiklenecek. Hem lambda hemde anonim inner class olarak örneğimizi yapacağız. 

Genellikle yazılımcılar bu ikisi yani changeListener ve invalidationListener arasındaki fark ne diye düşünüyorlar. ChangeListener kullanıldığında elimizde ObservableValue , oldValue ve newValue diye 3 tane nesnemiz oluyor. Ancak InvalidationListener da sadece bir Observable nesnesi dönüyor. Bu durumda oldvalue ve newValue değerleri hesaplanmadığından bir performans olarak size yansıyor. Yani grafiksel bir işlem yaptığınızı düşünün burada kullanırken gereksiz yere yapılan işler bilgisayarda performans kaybına neden olacaktır. eski ve yeni değerlerin değerlendirmeye alınmadığı durumlarda kullanılabilir. Örnek basit bir uygulama ekleyelim.

şeklinde devam edecektir. 

admin

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir