Thiết lập các thuộc tính cho Bean

1. Các thuộc tính đơn giản Simple Properties

Các thuộc tính đơn giản mô tả trạng thái xuất hiện và các hành vi cùa Bean mà ta có thể thay đổi được ưong thời gian thiết kế. Đây là những thuộc tỉnh riêng và muốn truy cập các phương pháp đế đọc hoặc ghi chúng. Bộ công cụ dựa trên JavaBean sử dụng những phương pháp được thiết lập theo mẫu thiết kế để thực hiện:

  • Phát hiện các thuộc tính cùa Bean
  • Xác định các thuộc tính đọc/ghi
  • Xác định các kiểu của thuộc tinh
  • Hiển thị các thuộc tính
  • Thay đổi các thuộc tình trong thời gian thiết kế.

Ví dụ, ta cần bổ sung thuộc tính Color vào CustomBean, do vậy lớp CustomBean có thêm các lệnh như sau:

public class CustomBean extends Canvas implements Serializable! private Color color = Color.green;

// Phương pháp tạo lập đặt lại các thuộc tính được kế thừa

public CustomBean(){ setsize (60, 40); setBackground(Color.red);

}

public Color getColor(){ return color;

}

public void setColor (Color newColor) { color = newColor;

repaint ();

}

CustomBean sẽ hiển thị hình chữ nhật màu xanh lá cây ờ giữa khung cửa sổ. Khi muốn thay đổi màu, ta kích đúp vào vùng màu ứng với color ờ cửa sổ Properties, một hộp thoại soạn thảo tương ứng được hiển thị để ta có thể thay đổi theo ý muốn.

2. Các thuộc tính biên Bound Properties

Nhiều khi một thành phần thay đổi thuộc tính thì những đổi tượng khác phải biết được những sự thay đổi đó để ứng xử cho thích hợp. Khi những thuộc tính biên thay đổi, một thông báo về sự thay đổi đó được gửi đển cho những đối tượng liên quan.

Để thực hiện được những yêu cầu trên, lớp PropertỵChangeSupport phải cài đặt phương pháp bổ sung, loại bỏ đối tượng cùa PropertyChangeListener khỏi danh sách. Ta thực hiện thêm các lệnh sau trong CustomBean:

// Nhập gói java, beans để truy cập vào PropertỵChangeSupport

import java.beans;

//Tạo lập một đổi tượng changes để lắng nghe sự thay đổi

private PropertyChangeSupport changes = new PropertyChangeSupport(this) ;

// Bổ sung đối tượng thể hiện sự thay đổi vào danh sách

public void addPropertvChangeListener(PropertyChangeListener 1){ changes.addPropertyChangeListener(1);

}

// Loại một đối tượng ra khỏi danh sách

public void rarovePropertyChangeLístener (PropertyChangeListener 1) { changes.removePropertyChangeListener(1);

// Đặt tên mới cho nhãn

public void setLabel(String newLabel){

String oldLabel = label; label = newLabel; sizeToFit0 ;

changes.firePropertyChange(“label”, oldLabel, newLabel);

}

Lớp java .beans, PropertỵChangeListener                     API

  • void propertyChange (PropertyChangeEvent event ): được gọi khi xuất hiện một kiện thay đổi thuộc tính.

Lớp java. beans. PropertyChangeSupport                     API

  • void propertyChangeSupport(Object sourceBean) : Tạo ra một đối tượng, trong đó sourceBean thường
  • void addPropertyChangeListener(PropertyChangeListener listener) : Đưa thêm listener vào danh sách các phần từ lắng nghe.
  • void RemovePropertyChangeListener(PropertyChangeListener listener) : Đưa listener ra khỏi danh sách các phần tử lắng nghe.
  • void firePropertyChange(String propertyName, Object oldValue, Object newValue): Gửi PropertyChangeÊvnt tới các phẩn tử lắng nghe.

Lớp java. beans. PropertyChangeEvent                       API

  • PropertyChangeEvent (Object source, string propertyName, Object oldValue, newValue) : Tạo ra một đối tượng sự kiện mới.
  • Object getNewValue ( ) : Đọc giá trị mới của thuộc tính.
  • Object getOlđValue ( ) : Đọc giá trị cũ của thuộc tính.
  • String getPropertyName (): Đọc tên của thuộc tính.
  • PropertyChangeEvent(Object source, string propertyName, Object oldValue, newValue) : Tạo ra một đối tượng sự kiện mới.
  • Object getNewValue ( ) : Đọc giá trị mới của thuộc tính.
  • Obj ect getOldValue ( ) : Đọc giá trị cũ của thuộc tính.
  • String getPropertyName ( ) : Đọc tên của thuộc tính.

3. Các thuộc tính bị khống chế Constrained Properties

Thuộc tính của Bean bị khống chế khi có một sự thay đổi thuộc tính mà không được chấp nhận.

JavaBean API cung cấp một cơ chế xù lý các sự kiện tương tự như đối với các thuộc tính biên, cho phép không chấp nhận sự thay đổi cùa các thuộc tính. Do vậy, phải cài đặt ít nhất một thuộc tính bị khống chế trong Bean.

private VetoableChangeSupport vetos

= new VetoableChangeSupport (this);

// Bổ sung đối tượng phủ định thay sự đổi vào danh sách

public void adđVetoableChangeListener (VetoableChangeListener 1){ vetos.adđVetoableChangeListener(1);

}

// Loại một đối tượng ra khỏi danh sách

public void renoveVetoableChangeListener (VetoableChangeListener 1) { vetos. removePropertyChangeListener (1);

} // Đặt tên mới cho nhãn

public void setPricelnCents(int newPrice) throws PropertyVetoException{ int oldPrice = ourPrincelnCents; vetos.fireVetoableChange(“pricelnCents”,

new Integer(oldPrice), new Integer(newPrice)); ourPrincelnCents = newPrice; sizeToFit();

changes.firePropertyChange(“pricelnCents”,

new Integer(oldPrice), new Integer(newPrice));

Lớp java.beans.PropertyChangeListener

  • void VetoableChange (PropertyChangeEvent event): được gọi khi xuất hiện một kiện thay đổi thuộc tính.

Lớp java.beans.VetoableChangeSupport      

  • void VetoableChangeSupport(Object sourceBean) : Tạo ra một đối tượng, trong đó sourceBean thường
  • void addVetoableChangeListener(VetoableChangeLístener listener) : Đưa thêm li stener vào danh sách các phần tử lắng nghe.
  • void RemoveVetoableChangeListener(VetoableChangeListener listener) : Đưa listener ra khỏi danh sách các phần tử lắng nghe.
  • void firePropertyChange(String propertỵName, Object oldValue, Object newValue) : Gửi PropertyChangeÊvnt tới các phần từ lắng nghe.

4. Các thuộc tính chỉ số hóa Indexed Properties

Thuộc tính chì số hoá biểu diễn những tuyển tập các giá trị cho phép truy cập giống như đổi với máng. Nó có dạng:

// Truy cập vào màng các giá trị

public <PropertyType>[] get <PropertyName>[]; public void <PropertyName>(<PropertyType>[] value);

// Truy cập vào tùng giá trị

public <PropertyType> get <PropertyName>(ìnt index);

public void set <PropertyTỵpe> (int index, <PropertỵType> val);