Tài liệu Lập trình java nâng cao - Chương 02: Javabeans: LẬP TRÌNH JAVA NÂNG CAOChương 02: JavaBeansLê TânBộ môn: Lập trình máy tínhNội dung chương 02Tổ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 JavaBeansJavaBeans là gì?Các thành phần phần mềm được viết bằng JavaCác thành phần kết nối và cấu hìnhBuilder Tools cho phép kết nối và cấu hình BeansMở đầ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ĩaJavaBeans 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 đượcCông nghệ phần mềm dựa trên thành phầnNhu cầu s...
29 trang |
Chia sẻ: Khủng Long | Lượt xem: 1068 | Lượt tải: 1
Bạn đang xem trước 20 trang mẫu tài liệu Lập trình java nâng cao - Chương 02: Javabeans, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
LẬP TRÌNH JAVA NÂNG CAOChương 02: JavaBeansLê TânBộ môn: Lập trình máy tínhNội dung chương 02Tổ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 JavaBeansJavaBeans là gì?Các thành phần phần mềm được viết bằng JavaCác thành phần kết nối và cấu hìnhBuilder Tools cho phép kết nối và cấu hình BeansMở đầ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ĩaJavaBeans 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 đượcCông nghệ phần mềm dựa trên thành phầnNhu cầu sử dụng lại mãCông nghệ phần mềm thay đổi nhanh chóngTí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ầnPhần mềm được lắp ráp từ các thành phầnThà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 JavaBeansThuộc tính: biểu diễn trạng thái của BeansBiểu diễn trạng thái của thành phần JavaBeansThay đổi thuộc tính sẽ thay đổi diện mạo và hành vi của thành phầnThay đổi thuộc tính của thành phầnThay đổi trực tiếp bằng các dòng lệnhSử dụng các công cụ trực quan (ví dụ JBuilder) Các phương thức truy cập: setter/getterThuộ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 đổiBound 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 Aimport 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 Aimport 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ộcThuộ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ứcpublic void addVetoableChangeListener (VetoableChangeListener lsn){ .... }public void removeVetoableChangeListener (VetoableChangeListener lsn){ ....}Ví dụ: Tạo thành phần Bimport 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 Bimport 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);}}IntrospectionIntrospection 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 intPhương thức mẫu cho thuộc tínhPhương thức setter:public get()Phương thức getter:public void set( newValue)Phương thức mẫu cho sự kiệnPhương thức add:public void add ( e)Phương thức remove:public void remove ( e)Xử lý sự kiệnNguồ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 listenerSự kiện bên trongBản thân hệ thống là nơi phát sinh sự kiệnĐối tượng listener là thành phần JavaBeansComponentListener: 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ímMouseListener: sự kiện xuất phát từ chuộtMouseMotionListener: sự kiện di chuyển chuộtWindowListener: 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 trongCá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ácBả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 ( e) public void remove ( e)Xây dựng một JavaBeanChuẩ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ínhThiết kế phương thứcThiết kế sự kiệnKiểm tra JavaBeansThuộc tính phải thể hiện đúng bản chấtPhương thức phải hỗ trợ được tính năng mà thành phần JavaBeans cung cấpSự 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 JavaBeansLớ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ấpTậ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.classJava-Bean: TrueĐóng gói JavaBeans: Sử dụng chương trình jar.exe đi kèm với bộ JDKCách dùng: jar {ctx}[option][jar-file][manifest file] files...BeanInfoCung cấp thêm thông tin, sử dụng các đối tượng FeatureDescripterCác lớp con:BeanDescripter, PropertyDescripter, IndexedPropertyDescripter, EventSetDescripter, MethodDescripter, ParameterDescripterBeanInfoICON để biểu diễn BeanGiao diện Customizer (wizard for set up)Tham chiếu Property EditorLiệt kê các đặc tính với descriptionsLiệt kê các phương thức với descriptionsPhươ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());Các phương thức của BeanInfopublic MethodDescriptor[] getMethodDescriptors()public PropertyDescriptor[] getPropertyDescriptors()public EventSetDescriptor[] getEventSetDescriptors()public BeanDescriptor getBeanDescriptor()Các phương thức của PropertyDescriptorpublic Class getPropertyType()public boolean isConstrained()...BeanboxThao tác nguyên thuỷ là thiết lập các giá trị thuộc tínhBộ biên soạn thuộc tính đối với các dạng chungThiết lập FontThiết lập màu nền/chữThiết lập các giá trị sốThiết lập các giá trị chuỗiCài đặt Bean Beanbox: Sao chép file jar đến thư mục /jars trong thư nục BDK Sự khác biệt phụ thuộc vào công cụ được sử dụng
Các file đính kèm theo tài liệu này:
- tailieu.ppt