Bài giảng lập trình java căn bản chương 6 1 ths võ đức cẩm hải

44 2 0
Bài giảng lập trình java căn bản chương 6 1   ths  võ đức cẩm hải

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương Mơ hình kiện với AWT Mơ hình kiện Slide / 44 Mục tiêu Hiểu cần thiết phải kiểm soát biến cố Biết cấu trúc biến cố gói AWT Nắm bắt cách để kiểm soát biến cố Hiểu lớp vơ danh (anonymous class) Mơ hình kiện Slide / 44 Nội dung 6.1- Ơn tập 6.2- Mơ hình ứng dụng hướng kiện 6.3- Cấu trúc kiện AWT 6.4- Các Event Adapter 6.5- Tóm tắt cách quản lý kiện 6.6- Trò chơi Puzzle 6.7- Code quản lý biến cố 6.8- Lớp vơ danh (Anonymous class) 6.9- Tóm tắt 6.10- Câu hỏi 6.11- Bài tập Mơ hình kiện Slide / 44 6.1- Ơn tập • AWT cung cấp tập lớp để người lập trình tạo GUI cho ứng dụng • AWT cung cấp mơ hình bố trí phần tử lên GUI gồm: FlowLayout : BorderLayout: GridLayout: GridBagLayout: Bố trí dạng tuần tự, Bố trí biên, Bố trí dạng lưới phần tử chiếm Bố trí dạng lưới , phần tử chiếm nhiều CardLayout: Bố trí dạng phân lớp, thời điểm có lớp tích cực Bố trí phức tạp: Kết hợp nhiều panel Mơ hình kiện Slide / 44 6.2- Mơ hình ứng dụng hướng kiện • Event-Oriented Application Model: Chương trình có GUI, user tương tác với GUI qua chuột, bàn phím,…, chương trình xử lý, trạng thái lại xuất cho user xem  thân thiện • Event : tín hiệu mà ứng dụng nhận biết có thay đổi trạng thái đối tượng • nguồn phát xuất event: (1) User( gõ phím, kích chuột vào phần tử,…), (2) Do hệ thống (do định thời tác vụ) (3) Do event khác ( event kích hoạt nhau) • Hiện nay, đa số ngơn ngữ cung cấp mơ hình này, VC++ cung cấp MFC (Microsoft Foundation Classes), Java cung cấp JFC (Java Foundation Classes) Mơ hình kiện Slide / 44 6.2.1- Một minh họa vể ủy thác xử lý kiện Ta đối tượng Ta bị bệnh (sự kiện) Bệnh có trạng thái (đối tượng kiện) Một bác sĩ đối tượng khác Ta nhờ bác sĩ chữa bệnh (ủy thác xử lý kiện) Bác sĩ chờ (listen) ta đưa triệu chứng bệnh (đối tượng event) dựa vào trạng thái bệnh (đối tượng event) để xử lý phù hợp Có thể ta mắc nhiều bệnh  Có thể phải ủy thác chữa bệnh cho nhiều bác sĩ, bác sĩ loại bệnh Một bác sĩ chữa bệnh tùy thuộc vào định bác sĩ dựa tình hình thực tế dược phẩm Mơ hình kiện Slide / 44 Một minh họa Event Object (bệnh 1) Event Source (người bệnh) Event Object (bệnh 2) Event Listener (Bác sĩ 1) Event Listener (Bác sĩ 2) Tạo Event Object gặp kiện Có Event handler để xử lý Nội dung event handler tùy thuộc vào mục tiêu ứng dụng Mơ hình kiện Slide / 44 6.2.2- Một số định nghĩa • Event : Là tình ứng dụng nhận biết có đối tượng thay đổi trạng thái • Event handler: Là đoạn code đễn đạt phản ứng ứng dụng gặp event • Event source: Đối tượng kích hoạt (trigger, fire) event (thí dụ: nút lệnh bị user kích chuột) • Listener : Đối tượng nhận ủy nhiệm xử lý kiện cho đối tượng khác • Focus: Trạng thái đối tượng bị user nhắm đến để tương tác Mơ hình kiện Slide / 44 6.2.3- Đối tượng tự quản lý kiện ? Mỗi nút lệnh (lớp Button) ứng dụng cụ thể phản ánh trạng thái ứng dụng khác Khi thiết kế lớp Button, người thiết kế biết trước user kích vào nút chương trình phản ứng Event handler phụ thuộc vào ứng dụng cụ thể ứng dụng có nhiều event handler cho kiện đối tượng Java định nghĩa sẵn Listener Interface cho tình khác (mỗi Event object có listener interface xử lý tương ứng) Một lớp có khả listener phải cụ thể hóa – viết code- số hành vi xử lý event phù hợp ( nhận event làm tham số) Mô hình kiện Slide / 44 6.2.4-Java Event Delegation Model • Java cung cấp cơng cụ để quản lý kiện: (1)Tập lớp mô tả đối tượng Event (2)Tập Interface tương ứng cho lớp event, (3)Tập lớp Adapter tương ứng- Các lớp khai báo sẵn hành vi Interface tương ứng để tiết kiệm cơng sức cho người lập trình vì: Có lúc cần event handler mà người lập trính phải viết code (dù code trống) cho event handler khác khai báo interface Mơ hình kiện Slide 10 / 44 6.6- Trò chơi Puzzle Trò chơi Puzzle gồm nút Khi thắng xuất thông báo “You Win” Khi thắng: trật tự nút “123456780” Demo-PuzzleGame.java Mơ hình kiện Slide 30 / 44 6.7- Vài code quản lý biến cố • Biến cố focus • Biến cố bàn phím • Biến cố chuột Mơ hình kiện Slide 31 / 44 6.7.1- Biến cố focus Tình huống: Có hộp textbox txtCode ( mã nhân viên) , buộc nhập đòi hỏi phải nhập từ tối thiểu ký tự Khi txtCode focus mà liệu không hợp lệ, buộc trỏ quay hộp TextField // Thêm vào constructor frame FocusAdapter focusListener = new FocusAdapter() { public void focusLost(FocusEvent event) { txtCodeLostFocusHandler (event); // event handler } }; txtCode.addFocusListener(focusListener); Mơ hình kiện Slide 32 / 44 boolean CodeValid() { // cắt khoảng trống đầu đuôi txtCode.setText(txtCode.getText().trim()); int len= txtCode.getText().length(); // lấy độ dài chuỗi int Pos= txtCode.getText().indexOf(" ");// tìm vị trí khoảng trống if (len=0 ) return false; return true; } void txtCodeLostFocusHandler (FocusEvent event) { Component Src= event.getComponent(); if (!CodeValid() && !event.isTemporary()) { txtCode.setText(""); txtCode.requestFocus(); Message("Code is a word with at least characters!"); } } Mơ hình kiện Slide 33 / 44 6.7.2- Biến cố bàn phím Tình huống: Có hộp txtBirthYear, nhập năm sinh nhân viên: Đòi hỏi phải nhập số KeyAdapter NumkeyListener= new KeyAdapter() { public void keyPressed(KeyEvent k_ev) { int c = k_ev.getKeyCode(); if (c < KeyEvent.VK_0 || c > KeyEvent.VK_9) // '9' // Back space to delete the input character k_ev.setKeyCode(KeyEvent.VK_BACK_SPACE); } }; txtBirthYear.addKeyListener(NumkeyListener); Mơ hình kiện Slide 34 / 44 6.7.3- Biến cố chuột Một trích đoạn biến cố chuột: public void mouseClicked( MouseEvent e) { int x = e.getX(); int y= e.getY(); int ClickCount= e.getClickCount(); if ( e.isShiftDown() && e.isControlDown() && ClickCount>3) txt1.setText(“Shift down, Ctrl down, >3”); } Mơ hình kiện Slide 35 / 44 6.8- Đối tượng vơ danh (Anonymous object) • Là đối tượng khơng gán tên gọi, new trực tiếp • Rất thường dùng việc quản lý biến cố Tạo động Adapter với event handler bên constructor toán class MyPanel extends Panel { MyPanel() // constructor { Button btn= new Button (“Yellow”); add(btn); btn.addMouseListener ( new MouseAdpter() { public void mouseClicked(MouseEvent e) { setBackground(Color.yellow); repaint(); } } ); // phát biểu constructor Mơ hình kiện Slide 36 / 44 6.9- Tóm tắt • Event : tín hiệu mà ứng dụng nhận biết có thay trạng thái • Event object : Đối tượng Java mô tả cho kiện • nguồn phát xuất event: (1) User( gõ phím, kích chuột vào phần tử,…), (2) Hệ thống (do định thời tác vụ) (3) Do event khác (các event kích hoạt nhau) • Event handler: Là đoạn code biểu diễn phản ứng chương trình gặp event • Event source: Đối tượng kích hoạt (trigger, fire) event (thí dụ: nút lệnh bị user kích chuột) • Khi trạng thái nội event source bị thay đổi, event source tạo event • Event Listener - Đối tượng chờ kiện : Là object Event source nhận biết event xẩy Mơ hình kiện Slide 37 / 44 Tóm tắt • Focus: Trạng thái đối tượng bị user nhắm đến để tương tác • Mơ hình ủy thác kiện mơ hình đối tượng gặp tình phải phát sinh kiện, kiện truyền cho đối tượng khác xử lý hộ • Java xây dựng class riêng có tên Event, lớp Adapter interface có tên Listener giúp quản lý event • Quản lý event cách liên kết phần tử GUI với đối tượng thuộc lớp Event lớp Adapter lớp thực interface tương ứng Ta nói phần tử có đăng ký chờ (listener) kiện • Có hai dạng thực event handler: (a) Phân tán: Mỗi event listener riêng cho component, (b) Tập trung: event listener chung số component Mơ hình kiện Slide 38 / 44 Tóm tắt cách quản lý biến cố cho component- Cách Container chứa component làm ln vai trị Event Listener cho component mà chứa Nếu có nhiều component có chung loại event, event handler container xử lý tập trung Tham khảo tập có hướng dẫn class GUI extends Frame implements EventListener Frame F { Component c = new Componenet( ); GUI() Bài toán { Component c c.addxxxListener (this); } public void EventHandler( xxEvent e) Dự kiến biến cố cho c { } } Mô hình kiện Slide 39 / 44 Tóm tắt cách quản lý biến cố cho component- Cách Tạo lớp riêng đóng vai trị Event Listener (hiện thực event handler) cho component mà container chứa Vì event handler phải truy xuất đến liệu container nên khai báo inner class Nếu có nhiều component có chung loại event, event handler container xử lý tập trung Tham khảo thí dụ class GUI extends Frame { Component c = new Component ( ) MyListener Lst = new MyListener(); GUI() Frame F { c addXXXListener (Lst) ; Bài toán } Component c class MyListener extends XXXAdapter { public void EventHandler( xxxEvent e) { } }// Mơ hình kiện Dự kiến biến cố cho c } Slide 40 / 44 Tóm tắt cách quản lý biến cố cho component- Cách Tạo động Adapter/Event Listener, thực event handler cho listener động – xem lại thí dụ class GUI extends Frame { Component c = new Component ( ) MyListener Lst = new MyListener(); GUI() // constructor { xxxListener Lst = new xxxAdapter() // xxxListener() Frame F { public void Handler ( xxxEvent e) { } ; } Bài toán Component c c addXXXListener (Lst); } } Dự kiến biến cố cho c Mơ hình kiện Slide 41 / 44 6.10-Câu hỏi 1- Biến cố (sự kiện) gì? 2- Thế mơ hình Event Delegation Model 3- Biến cố tạo phím Shift phím Control nhấn 4- Mô tả mối quan hệ Event source, Event Listener Listener Interface Mơ hình kiện Slide 42 / 44 6.11- Bài tập Quay lại toán quản lý nhân viên chương trước ( thí dụ đầu tiên) Viết biến cố cần thiết đáp ứng: Tên: Khơng cho phép chuỗi trống có từ Năm sinh: Chỉ cho phép nhập ký số từ đến trị phải thuộc khoảng : 1960

Ngày đăng: 21/07/2023, 16:51

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan