Tải bản đầy đủ (.ppt) (29 trang)

Bài giảng - Giao án: Bài giảng Java chương 2 javabeans

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (490.08 KB, 29 trang )

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


Mở đầu cho ‘Age of Component Developer’

Đưa các phương pháp công nghệ vào trong
công nghệ phần mềm (e.g. electronics…)
Định nghĩa

JavaBeans là một thành phần phần mềm tái sử
dụng được, có thể thao tác một cách trực quan
trong ‘builder tool’.

JavaBeans API cung cấp một framework cho phép
định nghĩa các thành phần phần mềm có thể nhúng
và tái sử dụng được.

JavaBeans là những giao tiếp lập trình được, để
tạo ra những khối mã xây dựng sẵn và có thể dùng
lại được
Công nghệ phần mềm dựa trên thành phần

Nhu cầu sử dụng lại mã

Công nghệ phần mềm thay đổi nhanh chóng

Tính phức tạp của dự án cùng với khối lượng các
đoạn mã lệnh khổng lồ

Xây dựng phần mềm từ các thành phần

Phần mềm được lắp ráp từ các thành phần


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

giá trị

Cài đặt một thuộc tính thông báo cho các thành
phần Beans khác biết khi nó thay đổi giá trị: cài
đặt hai phương thức đăng ký và loại bỏ đối tượng
listener
public void addPropertyChangeListener(
PropertyChangeListener l) {
changes.addPropertyChangeListener(l);
}
và:
public void
removePropertyChangeListener(PropertyChangeListener l)
{
changes.removePropertyChangeListener(l);
}
Ví dụ: Tạo thành phần A
import java.util.*; import java.beans.*;
public class A{
protected PropertyChangeSupport changeAgent = new
PropertyChangeSupport(this);
private int size = 0;
public int getSize(){ return size;
}
public void setSize(int newSize){
int oldSize = size; size = newSize;
changeAgent.firePropertyChange("size", new Integer(oldSize), new
Integer(newSize));
}
public void addSizeListener(PropertyChangeListener lsn){

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 đó.


Đăng ký đối tượng listener cho thuộc tính ràng buộc: cài đặt
hai phương thức
public void addVetoableChangeListener (VetoableChangeListener
lsn){

}
public void removeVetoableChangeListener
(VetoableChangeListener lsn){

}
Ví dụ: Tạo thành phần B
import java.util.*; import java.beans.*;
public class B{
protected VetoableChangeSupport veto = new VetoableChangeSupport(this);
private int size = 0;
public int getSize(){return size; }
public void setSize(int newSize){
int oldSize = size;
try{
veto.fireVetoableChange("size", new Integer(oldSize), new
Integer(newSize));
} catch (PropertyVetoException e) {System.out.println("Listener reject"); }
size = newSize;
}
public void addSizeListener(VetoableChangeListener lsn){
veto.addVetoableChangeListener(lsn); }
public void removeSizeListener(VetoableChangeListener lsn){
veto.removeVetoableChangeListener(lsn);
}}
Ví dụ: Sử dụng B

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)


Tạo một thuộc tính tên Weight có kiểu int
Phương thức mẫu cho thuộc tính

Phương thức setter:
public <PropertyType> get< PropertyName>()

Phương thức getter:
public void set< PropertyName>(<PropertyType> newValue)
Phương thức mẫu cho sự kiện

Phương thức add:
public void add<EventListenerType> (<EventListenerType> e)

Phương thức remove:
public void remove<EventListenerType> (<EventListenerType> e)
Xử lý sự kiện

Nguồn sự kiện (event source): đối tượng sản
sinh sự kiện.

Đối tượng tiếp nhận và xử lý sự kiện phát sinh
từ đối tượng khác: đối tượng listener
Sự kiện bên trong

Bản thân hệ thống là nơi phát sinh sự kiện

Đối tượng listener là thành phần JavaBeans

ComponentListener: nhận biết sự kiện đối tượng thay đổi kích

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) {}

public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
}
Xử lý sự kiện bên trong (tt)

Cách 2: bản thân thành phần JavaBeans cài đặt cho các
giao tiếp listener và đăng ký với hệ thống thông qua
biến this. Ví dụ:
public class BeanTest extends Panel implements Mouselistener{
addMouseListener( this);
public void mouseClicked(MouseEvent e) {
System.out.println(“Mouse click”);
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
}
Sự kiện tương tác

Bản thân thành phần JavaBeans là nơi phát sinh
sự kiện

Đối tượng listener là các đối tượng khác

Đăng ký đối tượng listener với thành phần
JavaBeans
public void add<EventListener> (<EventListener> e)
public void remove<EventListener> (<EventListener> 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


Lớp BeanInfo.class: Chứa thông tin về các thuộc tính,
phương thức, tình huống, biểu tượng mà thành phần
JavaBeans cung cấp

Tập tin kê khai (manifest file): Liệt kê tất cả các tập
tin mà thành phần JavaBeans sử dụng.

Đặt tên: smith/proj/beans/BeanName.class

Java-Bean: True

Đóng gói JavaBeans: Sử dụng chương trình jar.exe đi
kèm với bộ JDK

Cách dùng:
jar {ctx}[option][jar-file][manifest file] files
BeanInfo

Cung cấp thêm thông tin, sử dụng các đối
tượng FeatureDescripter

Các lớp con:

BeanDescripter, PropertyDescripter,
IndexedPropertyDescripter,
EventSetDescripter, MethodDescripter,
ParameterDescripter
BeanInfo

ICON để biểu diễn Bean


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());

×