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

Slide 13 java beans

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 (1.03 MB, 49 trang )

LECTURE 13
JAVA BEANS
PHẦN 1
TỔNG QUAN
JAVABEANS
3
KHÁI NIỆM JAVA BEANS

Kiến trúc JavaBean
TM
dựa trên mô hình component. Mô
hình này cho phép các nhà phát triển phần mềm tạo ra các
đơn vị phần mềm có tên gọi là component.

Các component đuợc lắp ghép vào các applet, các ứng
dụng, các servlet hoặc vào các component phức tạp hơn
bằng các công cụ phát triển phần mềm trực quan.

Các JavaBean component được gọi là beans.

Beans có thể được thay đổi, tùy biến theo ý muốn. Ta có
thể chọn beans từ toolbox, kéo thả vào ứng dụng, hiệu
chỉnh hành vi và diện mạo của bean, định nghĩa sự tương
tác của bean với các bean khác, tích hợp beans vào các
ứng dụng, vào applet hoặc vào các beans mới.
4

GUI (graphical user interface)

Non-visual beans
Các beans khác nhau về chức năng và mục đích sử dụng.


Quá trình lập trình trong thực tiễn, chúng ta sẽ thấy một số
loại beans sau:
CÁC LOẠI JAVA BEANS
5
MỘT SỐ KHÁI NIỆM TRONG JAVABEANS

Properties: là các đặc điểm về diện mạo và hành vi của bean, chúng
được thay đổi lúc thiết kế. Các thuộc tính của bean được các
introspector phân tích rồi hiển thị ra giúp cho người thiết kế chương
trình có thể thao tác được trên bean.

Event: được các bean dùng để giao tiếp với nhau. Listener bean là
bean nhận events. Source bean là bean phát ra event.

Introspection: (phân tích bên trong) dùng để khám phá các đặc điểm
của bean

Customization: cấu hình tùy biến lúc thiết kế được thực hiện nhờ
thấy được các thuộc tính của bean.

Persistence: cho phép các bean lưu trữ và phục hồi các trạng thái
của chúng.

Methods: các phương thức
6
Thuộc tính của Beans
public class xBean
{ private String myName;
public String getName() { return myName;}
public void setName(String newName) { myName=newName;}

}
7
Bound Property – Thuộc tính liên quan

JavaBean là một thành phần riêng biệt nhưng nó vẫn có thể tương
tác với các đối tượng khác thông qua truyền thông điệp (message).

Khi một thuộc tính của Bean A thay đổi nó có thể thông báo cho
các đối tượng khác biết. Để thông báo sự thay đổi, ta phải cài đặt 2
phương thức sau:
public void add<PropertyName>Listener
(PropertyChangeListener lst)
public void remove<PropertyName>Listener
(PropertyChangeListener lst)
8
Bound Property
public class BeanA
{ float size;
private PropertyChangeSupport changeSize=new
PropertyChangeSupport (this);
public float getSize() { return size; }
public void setSize(float newSize) {
float oldSize = size; size = newSize;
if (oldSize!=newSize)
// gửi thông báo thay đổi thuộc tính đến các listener
changeSize.firePropertyChange ("size", new Float(oldSize), new
Float(newSize));
}
public void addSizeListener (PropertyChangeListener lst){}
public void removeSizeListener (PropertyChangeListener lst){}

}
Bound Property (đối tượng lắng nghe)

Các đối tượng muốn nhận thông báo từ JavaBean đều phải cài đặt giao
diện PropertyChangeListener và cài đè phương thức public void
propertyChange (PropertyChangeEvent evt) {}

Và để các đối tượng Listener có thể nhận biết được sự thay đổi của các
thuộc tính, ta phải gọi phương thức firePropertyChange của đối tượng
PropertyChangeSupport từ thành phần của Bean nguồn.
public void firePropertyChange
(String propertyName, Object oldValue, Object newValue)
Phương thức này sẽ gửi thông báo đến mọi đối tượng Listener.
9
Bound Property – Ví dụ
import java.beans.*;
public class BeanA {
private float size;
PropertyChangeSupport changeSize = new PropertyChangeSupport(this);
public float getSize() { return size; }
public void setSize(float newSize) {
float oldSize = size; size = newSize;
if(oldSize!=newSize)
changeSize.firePropertyChange("size", new Float(oldSize), new
Float(newSize));
}
public void addSizeListener(PropertyChangeListener lst) {
changeSize.addPropertyChangeListener(lst);}
public void removeSizeListener(PropertyChangeListener lst) {
changeSize.removePropertyChangeListener(lst);}

}
10
Bound Property – Ví dụ
import java.beans.*;
public class TestBeanA {
public static void main(String[] args) {
BeanA ba = new BeanA();
ba.addSizeListener(new MyListener());
ba.setSize(333);}
}
class MyListener implements PropertyChangeListener {
public void propertyChange(PropertyChangeEvent evt) {
float oldSise = ( (Float) evt.getOldValue()).floatValue();
float newdSise = ( (Float) evt.getNewValue()).floatValue();
String propertyName = evt.getPropertyName();
System.out.println("Change " + propertyName + " old value " +
oldSise + " new value " + newdSise); }
}
11
Constrain Property – Thuộc tính ràng buộc

Ngoài thuộc tính Bound, Java còn cung cấp thuộc tính Constrain. Tương
tự như thuộc tính Bound, mỗi khi thuộc tính Contraint bị thay đổi nó sẽ
thông báo đến tất cả các Listener. Nếu một trong các đối tượng Listener từ
chối thì thuộc tính này vẫn giữ nguyên giá trị cũ.

Để thông báo sự thay đổi, ta phải cài đặt 2 phương thức sau:
public void add<PropertyName>Listener
(VetoableChangeListener lst)
public void remove<PropertyName>Listener

(VetoableChangeListener lst)
12
Constrain Property (Lắng nghe)

Các đối tượng lắng nghe phải cài đặt giao diện
VetoableChangeListener, và cài đè :
public void vetoableChange
(PropertyChangeEvent evt) throws PropertyVetoException
{ }

Và để các đối tượng Listener có thể nhận biết được sự thay đổi của
các thuộc tính Constraint, ta trong phương thức “set” của Bean
nguồn phải thực hiện thông báo bằng phương thức
fireVetoableChange của VetoableChangeSupport như sau:
public void fireVetoableChange
(String propertyName, Object oldValue, Object newValue)
13
Constrain Property - Ví dụ
import java.beans.*;
public class BeanB {
private int size = 0;
private VetoableChangeSupport vetoAgent = new
VetoableChangeSupport(this);
public int getSize() { return size; }
public void setSize(int newSize) {
int oldSize = size;
try {
vetoAgent.fireVetoableChange("size", oldSize, newSize); }
catch (PropertyVetoException ex)
{ return;

}
size = newSize;
}
14
Constrain Property - Ví dụ
class MyListener implements VetoableChangeListener
{
public void vetoableChange(PropertyChangeEvent evt) throws
PropertyVetoException
{
int oldSize = ( (Integer) evt.getOldValue()).intValue();
int newSize = ( (Integer) evt.getNewValue()).intValue();
String propName = evt.getPropertyName();
if (newSize > 100)
throw new PropertyVetoException("Gia tri gan cho Size lon hon 100", evt);
}
}
15
Event

JavaBean có khả năng nghe các sự kiện do các đối tượng khác gửi đến.
Để có thể nghe và xử lý các sự kiện do đối tượng khác gửi đến, ta phải cài
đặt các giao tiếp tương ứng. Ví dụ để lắng nghe các sự kiện về chuột, ta
cài đặt giao tiếp MouseListener:
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
public class Bean3 implements MouseListener
{
public void mouseClicked(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }

public void mouseExited(MouseEvent e) { }
public void mousePressed(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { }
}
16
Event (Đăng kí đối tượng lắng nghe sự kiện)

public synchronized void add<EventListener>
(<EventListener> lst)

public synchronized void remove<EventListener>
(<EventListener> lst)
Ví dụ:

public synchronized void addMouseListener(MouseListener l)

public synchronized void removeMouseListener(MouseListener l)
17
Event (Đăng kí đối tượng lắng nghe sự kiện)

Nếu có nhiều đối tượng lắng nghe thì ta thường lưu trữ các đối tượng đã
đăng kí vào một Vector.
private transient Vector mouseListeners=new Vector(); //
public synchronized void addMouseListener(MouseListener l)
{ if (!mouseListeners.contains(l)) {
mouseListeners.addElement(l); // Thêm vào danh sách
}
}
public synchronized void removeMouseListener(MouseListener l) {
if (mouseListeners != null && mouseListeners.contains(l))

{ mouseListeners.removeElement(l); }
}
protected void fireMouseClicked(MouseEvent e) {} // thong bao
18
Event (Lắng nghe)
class MyListener1 extends java.awt.event.MouseAdapter
{ MouseBean adaptee;
MyListener1(MouseBean adaptee)
{
this.adaptee = adaptee;
}
public void mouseClicked(MouseEvent e)
{
adaptee.jButton1_mouseClicked(e);
}
}
19

Vấn đề khi bạn kéo thả một javabean vào Form, làm thế nào đề môi
trường trực quan này biết được trong javabean có những thuộc tính nào?

Giải quyết vấn đề này bằng tình phản xạ, công cụ Instrospector của java
giúp ta xử lý vấn đề này. Phương thức quan trong của lớp này là
getBeanInfo trả về lớp BeanInfo.
20
Instrospector
PHẦN 2
TẠO VÀ SỬ DỤNG
JAVABEAN ĐƠN GIẢN
22

CÁC PHẦN MỀM CẦN CÀI ĐẶT
1) Java Standard Development Kit (JDK™) version 6.0
- Download tại:
/>- Hướng dẫn cài đặt tại:
/>javaprogenv/index.html#0.1
2) NetBeans IDE
- Download tại:
/>- Hướng dẫn cài đặt tại:
/>javaprogenv/index.html#0.2
23
TẠO MỘT NETBEANS PROJECT

Chạy phần mềm NetBeans 6.5 lên.

Chọn File từ top-level menu rồi chọn New Project.

Hộp thoại New Project xuất hiện.

Chọn Java trong phần Categories và chọn Java Application
trong phần Projects.

Nhấp Next.

Trong vùng Name and Location, ở phần Project Name, nhập
chuỗi BeansExample để đặt tên cho project.

Ở phần Create Main Class, nhập vào chuỗi BeansExample.

Nhấp Finish để hoàn tất việc tạo project này.
24

TẠO MỘT NETBEANS PROJECT (tt)
25
TẠO MỘT NETBEANS PROJECT (tt)

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×