LẬP TRÌNH JAVA NÂNG CAO
Chương 02: JavaBeans
Bộ môn: Lập trình máy tính
Nội dung chương 02
Tổng quan về JavaBeans
Công nghệ phần mềm dựa trên các thành phần
Các thuộc tính của thành phần JavaBeans
Introspector
Xử lý sự kiện của thành phần JavaBeans
Các bước xây dựng JavaBeans
Lớp BeanInfo
Tích hợp JavaBeans với các thành phần khác
Giới thiệu JavaBeans
JavaBeans là gì?
–
Các thành phần phần mềm được viết bằng Java
–
Các thành phần kết nối và cấu hình
–
Builder Tools cho phép kết nối và cấu hình
Beans
–
Thành phần là những đối tượng nhỏ độc lập
hoàn toàn với ứng dụng (ví dụ: button)
Các thuộc tính của thành phần JavaBeans
Thuộc tính: biểu diễn trạng thái của Beans
–
Biểu diễn trạng thái của thành phần JavaBeans
–
Thay đổi thuộc tính sẽ thay đổi diện mạo và
hành vi của thành phần
Thay đổi thuộc tính của thành phần
–
Thay đổi trực tiếp bằng các dòng lệnh
–
Sử dụng các công cụ trực quan (ví dụ JBuilder)
Các phương thức truy cập: setter/getter
Thuộc tính có chỉ số
Thuộc tính có chỉ số (Indexed properties)
–
Lấy và đặt các phần tử giá trị mảng
public void setXXX(int index, type value);
public void setXXX(type values[]);
public type getXXX(int index);
public type[] getXXX();
Thuộc tính thể hiện sự thay đổi
Bound properties: Phát sinh sự kiện khi thay đổi
changeAgent.addPropertyChangeListener(lsn);
}
public void removeSizeListener(PropertyChangeListener lsn){
changeAgent.removePropertyChangeListener(lsn);
}
}
Ví dụ: Sử dụng A
import java.util.*; import java.beans.*;
public class UseA{
public static void main(String[] arg){
A bean = new A();
bean.addSizeListener(new myListenerA()); bean.setSize(11);
}
}
class myListenerA implements PropertyChangeListener {
public void propertyChange (PropertyChangeEvent e) {
Integer newVal = (Integer)e.getNewValue();
Integer oldVal = (Integer)e.getOldValue();
String propName = e.getPropertyName();
System.out.println("Change " + propName + " from " + oldVal + " to "
+ newVal);
}
}
Thuộc tính ràng buộc
Thuộc tính ràng buộc (Constrained properties)
–
Phát sinh sự kiện khi thay đổi giá trị và cho phép listeners
“phản đối” sự thay đổi đó.
–
import java.util.*; import java.beans.*;
public class UseB{
public static void main(String[] arg){
B bean = new B();
bean.addSizeListener(new myListenerB());
bean.setSize(10);System.out.println("> size after setting " + bean.getSize());
bean.setSize(130);System.out.println("> size after setting " + bean.getSize());
}
}
class myListenerB implements VetoableChangeListener {
public void vetoableChange (PropertyChangeEvent e) throws
PropertyVetoException {
Integer nV = (Integer)e.getNewValue(); Integer oV =
(Integer)e.getOldValue();
String pName = e.getPropertyName();
if (newVal.intValue()>100) {
throw (new PropertyVetoException("Value greater than 100", e)); }
System.out.println("Change " + pName + " from " + oV + " to " + nV);
}}
Introspection
Introspection là bộ phân tích, qua đó Java xem
xét các đoạn mã của chương trình để tìm ra
những phương thức dùng để xây dựng và áp
dụng cho từng thuộc tính cũng như tình huống
cụ thể.
Ví dụ:
public int getWeight()
public void setWeight(int newWeight)
thước (resize), di chuyển (move), hiện ra (show) hay ẩn đi (hidden).
FocusListener: sự kiện đối tượng nhận Focus.
KeyListener: sự kiện xuất phát từ bàn phím
MouseListener: sự kiện xuất phát từ chuột
MouseMotionListener: sự kiện di chuyển chuột
WindowListener: sự kiện xuất phát từ cửa sổ (đóng, mở, thu nhỏ )
ActionListener: sự kiện mà đối tượng sẽ thực hiện một tác vụ
AdjustmentListener: sự kiện đối tượng thay đổi giá trị
ItemListener: sự kiện đối tượng thay đổi trạng thái (ví dụ
Checkbox)
Xử lý sự kiện bên trong
Cách 1: tạo ra một đối tượng listener riêng biệt rồi đăng
ký với hệ thống. Ví dụ:
public class BeanTest extends Panel {
addMouseListener( new Mylistener());
}
class Mylistener implements MouseListener{
public void mouseClicked(MouseEvent e) {
System.out.println(“Mouse click”);
}
public void mousePressed(MouseEvent e) {}
Xây dựng một JavaBean
Chuẩn bị:
Mục đích của thành phần JavaBeans?
Các chức năng của thành phần JavaBeans?
Hướng phát triển của thành phần JavaBeans?
Thiết kế:
Thiết kế thuộc tính
Thiết kế phương thức
Thiết kế sự kiện
Kiểm tra JavaBeans
Thuộc tính phải thể hiện đúng bản chất
Phương thức phải hỗ trợ được tính năng mà thành phần
JavaBeans cung cấp
Sự kiện phải kết nối được với thành phần JavaBeans khác
Đóng gói JavaBeans
Đóng gói JavaBeans
Giao diện Customizer (wizard for set up)
Tham chiếu Property Editor
Liệt kê các đặc tính với descriptions
Liệt kê các phương thức với descriptions
Phương thức thiết lập các đặc tính mặc định
MyBean mb = new MyBean();
BeanInfo bi = Introspector.getBeanInfo(mb.getClass());