Merhaba değerli Java dostları,

Bugün Java Beans hakkında yazmak istedim. Aslında basit bir konu ve doğru kullanılması halinde oldukça pratik bir yöntem. Java beans, bellirli kuralları olan klasik bir sınıftır. Amacı ise çoğu yerde karşılaştığımız gibi tekrar kullanılabilirlik, modüler yapı. Java beans için resmi tanım ise, Görsel araçlarda tekrar kullanılabilecek bileşenler olarak geçmektedir.

Java beans için temel iki paketimiz var. Bunlar java.beans ve java.beans.beancontext. Bir Java beans için temel üç bileşen vardır. Bunlar property, event ve method. Property, klasik bildiğimiz sınıfın alanlarına denk gelmektedir. Her property için set ve get metotları tanımlanır. Eğer sadece okunabilir bir alan istiyorsak sadece get metodunu tanımlamamız yeterli. Ayrıca bound property ve constrained property olmak üzere iki çeşit property vardır. Bound property ile bir alanın değeri değiştiğinde PropertyChangeEvent ve PropertyChangeListener aracılığı ile bilgi aktarımı yapılır. Constrained property de ise alana değerleri atarken belli kriterlerimiz vardır. Bu property türü ise VetoableChangeListener ve PropertyVetoException üzerinden ilerler.

Event, basit bir haberleşme tekniğidir. Örneklerini button, mouse gibi eventler üzerinde görebiliriz. Temeli EventObject ve EventListener sınıflarına dayanır. EventListener için add ve remove metotları tanımlanır. Register edilmek istenen sınıf bu arayüzü uygular ve add metodu ile kendisini ekler. EventObject aracılığı ile de istenen bilgiler taşınır.

Son bileşen method ise public olarak tanımlanan metotlardır.

BeanInfo denilen yapı, java beans üzerindeki property, event ve metotlar hakkında bilgi taşır.

PropertyEditor arayüzü daha çok görsel için kullanılan bir arayüzdür. Eclipse, NetBeans gibi IDE üzerindeki görsel araçlara denk gelir diyebiliriz.

Customizer arayüzü ise bir wizard, sihirbaz mantığı sağlar ve işlemlerin adım adım yapılmasını sağlar.

Java beans ile ilgili iki kritik özellike ise Serializable arayüzünün ve parametresiz bir yapılandırıcının olması gerekliliğidir.

Java beans üzerinde sadece tek bir listener olmasını ve add metodu ile birden fazla listener eklenmesini engellemek istiyorsak, TooManyListenerException kullanabiliriz.

Bunca yoğun teorik bilginin ardından örneğimize bakalım.

package anajavatica.bean;import java.awt.Color;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.beans.PropertyVetoException;
import java.beans.VetoableChangeListener;
import java.beans.VetoableChangeSupport;
import java.io.Serializable;

public class AJVBean implements Serializable, PropertyChangeListener, VetoableChangeListener {

private static final long serialVersionUID = 1L;
private int width = 1024;
private Color beanColor = null;
private PropertyChangeSupport pcs = new PropertyChangeSupport(this);
private VetoableChangeSupport vcs = new VetoableChangeSupport(this);

public int getWidth() {
return width;
}

public void setWidth(int width) throws PropertyVetoException {
vetoableChange(new PropertyChangeEvent(this, “Width”, this.width, width));
this.width = width;
}

public Color getBeanColor() {
return beanColor;
}

public void setBeanColor(Color beanColor) {
propertyChange(new PropertyChangeEvent(this, “BeanColor”, this.beanColor, beanColor));
this.beanColor = beanColor;
}

public void addPropertyChangeListener(PropertyChangeListener listener) {
pcs.addPropertyChangeListener(listener);
}

public void addVetoableChangeListener(VetoableChangeListener listener) {
vcs.addVetoableChangeListener(listener);
}

@Override
public void vetoableChange(PropertyChangeEvent evt) throws PropertyVetoException {
switch (evt.getPropertyName()) {
case “Width”:
if ((Integer) evt.getNewValue() < 100)
throw new PropertyVetoException(“Width can not be less than 100”, evt);
break;
}
}

@Override
public void propertyChange(PropertyChangeEvent evt) {
switch (evt.getPropertyName()) {
case “BeanColor”:
System.out.println(“Bean color changed from ” + evt.getOldValue() + ” to ” + evt.getNewValue());
break;
}
}

}

package anajavatica.bean;import java.awt.Color;
import java.beans.PropertyVetoException;

public class AJVBeanMain {

public static void main(String[] args) throws PropertyVetoException {

AJVBean bean = new AJVBean();
bean.addPropertyChangeListener(bean);
bean.addVetoableChangeListener(bean);

bean.setBeanColor(Color.BLUE);
bean.setBeanColor(Color.BLACK);

bean.setWidth(150);
bean.setWidth(12);

}

}

Bol Java’ lı günler dileğiyle… 😀

Categories:

2 Responses

  1. Faruk Hocamla bire bir çalışmış bir insan olarak bu ve diğer yazılarını çok beğendim. Yazılım işi araştırma ve gönül işi. Kendisini ileride çok iyi yerlerde göreceğimizi tahmin ediyorum.

  2. Çok teşekkür ederim Deniz Hocam. Elimizden geldiğince yeni şeyler öğrenmeye ve bunları mezara götürmeyip paylaşmaya çalışıyorum 😀 . Çok sağol değerli yorumların için.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.