Cáctương tác người dùng với các đối tượng giao diện được gọi là các sự kiện vàcác thông báo sự kiện được đưa vào chương trình mà người dùng đang tươngtác với của hệ điều hành Windows.. M
Trang 1TRƯỜNG ĐẠI HỌC NÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO BÀI TẬP LỚN MÔN LẬP
GV hướng dẫn : Ths Ngô Công Thắng
Trang 2MỤC LỤC
LỜI MỞ ĐẦU 3
I GIỚI THIỆU CHUNG VỀ LẬP TRÌNH BẮT SỰ KIỆN 4
1 Một số khái niệm 4
1.1 Sự kiện (Event) 4
1 2.Đơn vị xử lý sự kiện (event handler or event listener ) 4
2 Lập trình bắt sự kiện (Event-Driven Programming) 6
3 Ví dụ: 8
II MÔ HÌNH XỬ LÍ SỰ KIỆN 12
1 Giới thiệu chung: 12
2 Mô hình ủy thác sự kiện 12
3 Các lớp xử lý các sự kiện 14
III XỬ LÍ SỰ KIỆN 17
1 Xử lý sự kiện chuột 17
2 Sự kiện bàn phím (Key events) 21
IV DEMO 26
V TỔNG KẾT 26
VI TÀI LIỆU THAM KHẢO 27
Trang 3LỜI MỞ ĐẦU
Các chương trình dựa trên Windows có một giao diện người dùng đồ họa(GUI), và người dùng có thể tương tác với chương trình thông qua nó Giaodiện này bao gồm xây dựng trong nhiều đối tượng (giống như hộp văn bản,công cụ, biểu tượng …vv) Người dùng tương tác với các đối tượng GUI, hoặcthông qua cú nhấp chuột hoặc thông qua cách bấm phím trên bàn phím Cáctương tác người dùng với các đối tượng giao diện được gọi là các sự kiện vàcác thông báo sự kiện được đưa vào chương trình (mà người dùng đang tươngtác với) của hệ điều hành Windows
Với mong muốn tìm hiểu sâu hơn về quá trình bắt và xử lí các sự kiệnngười dùng trong Java nhóm chúng tôi quyết định thực hiện đề tài này Bởi vốnkiến thức còn hạn hẹp cùng với một thời gian rất ngắn, nhóm chúng tôi khôngthể tránh được nhiều thiếu sót, rất mong các bạn và thầy giáo đóng góp thêm ýkiến để đề tài của nhóm chúng tôi hoàn thiện hơn
Xin chân thành cảm ơn!
Nhóm sinh viên!
Trang 4I GIỚI THIỆU CHUNG VỀ LẬP TRÌNH BẮT SỰ KIỆN
( Introduction About Event-Driven Programming)
1 Một số khái niệm
1.1 Sự kiện (Event)
Sự kiện có thể được định nghĩa là một loai tín hiệu báo cho chương trình
có điều gì đó đã xảy ra…Sự kiện được sinh ra bởi các hành động của người sửdụng(Ví dụ: di chuột,kích phím chuột,ấn phím) hoặc bởi hệ điều hành(Ví dụ:Time)
Sự kiện là những hành động được thực hiện bởi người sử dụng trongquá trình sử dụng ứng dụng Nếu người dùng nhấp chuột vào một nút bất kỳđối tượng sau đó các sự kiện Click xảy ra Nếu người dùng di chuyển chuột sau
đó sự kiện di chuyển chuột xảy ra
Sự kiện là đối tượng mô tả tình trạng thay đổi ở nguồn, nó có thể đượctạo ra do tác động của người dùng tới các thành phần của giao diện đồ họa Mộtvài hoạt động có thể tạo ra sự kiện như: ấn nút, nhập ký tự thông qua bàn phím,chọn một mục trong danh sách, nhấn chuột và nhiều điều khiển từ ứng dụngkhác
Sự kiện có thể xảy ra không trực tiếp từ tác động người dung tới giaodiện Ví du: Sự kiện có thể xảy ra do hệ điều hành (Timer), do bộ đếm vượt quágiá trị, do phần cứng hoặc phần mềm bị hư, hoặc khi kết thúc một hoạt động
1 2.Đơn vị xử lý sự kiện (event handler or event listener )
• Là một phương thức (hàm) nhận đầu vào từ một thiết bị như chuột haybàn phím và thực hiện một việc nào đó để phản ứng lại với một sự kiện xảy
ra trên thiết bị đó
• Hàm xử lý sự kiện này sẽ được tự động gọi khi sự kiện tương ứng phátsinh
Ví dụ: Một đơn vị xử lý sự kiện có tên “jButton18MousePressed”:
private void jButton18MousePressed(MouseEvent evt)
{
String str=jTextField1.getText()+jButton18.getText();
jTextField1.setText(str) ;
}
Trang 5a)Một xử lý sự kiện tầm thường
Bởi vì để kiểm tra các mã cho các sự kiện và các vòng lặp chính khôngphụ thuộc vào ứng dụng, và mong muốn người dùng chỉ cung cấp mã cho các
xử lý sự kiện Trong ví dụ đơn giản này có một xử lý sự kiện được gọi làOnKeyEnter () bao gồm một đối số với một chuỗi ký tự, tương ứng với những
gì mà người dùng đánh máy trước khi nhấn phím ENTER
b)Xử lý ngoại lệ
Trong một số ngôn ngữ lập trình , mặc dù một chương trình chính nókhông được chủ yếu là hướng sự kiện, sự kiện bất thường nào đó như một phầncứng , lỗi tràn hoặc kiểm tra chương trình có thể xảy ra mà cần được xử lý
c)Tạo xử lý sự kiện
Bước đầu tiên trong việc phát triển một chương trình hướng sự kiện làviết một loạt các chương trình con , hoặc các phương pháp, được gọi là sự kiệnthường trình xử lý Những thói quen xử lý các sự kiện mà các chương trìnhchính sẽ trả lời Ví dụ, một nút trái chuột vào một nút lệnh trong một giao diệnchương trình có thể kích hoạt một thói quen đó sẽ mở ra một cửa sổ, lưu dữ liệuvào một cơ sở dữ liệu hoặc thoát khỏi ứng dụng
Bước thứ hai là để xử lý sự kiện gắn với các sự kiện để các chức năngđược gọi khi sự kiện diễn ra Kết hợp với nhấp đúp chuột vào một nút, và tạo ramột trình biên tập xử lý sự kiện (trống) liên kết với người sử dụng nhấn vào nút
và mở ra một cửa sổ văn bản để bạn có thể chỉnh sửa các xử lý sự kiện
Bước thứ ba trong việc phát triển một chương trình hướng sự kiện là viếtcác vòng lặp chính Đây là một chức năng để kiểm tra sự xuất hiện của các sựkiện, và sau đó gọi là xử lý sự kiện phù hợp để xử lý nó Hầu hết các môitrường lập trình hướng sự kiện đã được cung cấp vòng lặp chính, vì vậy nókhông cần phải được quy định cụ thể của các lập trình ứng dụng RPG , mộtngôn ngữ lập trình đầu từ IBM, mà năm 1960 đã được thiết kế ý tưởng tương tựnhư lập trình hướng sự kiện đã nói ở trên, cung cấp tích hợp trong chính I / Ovòng lặp (được gọi là "chu kỳ chương trình")
Trang 62 Lập trình bắt sự kiện (Event-Driven Programming)
Lập trình bắt sự kiện là một cách linh hoạt để cho phép các chương trìnhcủa bạn đáp ứng với nhiều yếu tố đầu vào khác nhau hoặc các sự kiện
a Lập trình hướng thủ tục (Procedural programming) : Chương trình được
thực hiện theo thứ tự thủ tục
Kĩ thuật lập trình này dựa trên quan niệm phân tích một chức năng xử líthông tin thành các chức năng nhỏ hơn, làm mịn dần quá trình này cho tới khixây dựng được các đơn thể Chương trình chỉ dùng các cấu trúc điều khiển cơbản: tuần tự, rẽ nhánh, lặp và ra khỏi lặp Lập trình hướng thủ tục sử dụng cáchtiếp cận từ trên xuống, tức là phân tách từ toàn thể đến bộ phận, rồi lại từ bộphận đến bộ phận nhỏ hơn Các đơn thể trong một chương trình có cấu trúc cótính độc lập tương đối cao, chỉ giao tiếp với nhau thông qua giao diện đã xáclập trước, do đó kỹ thuật lập trình này có một số ưu điểm: dễ phân công nhiềungười cùng lập một chương trình, dễ thử và hiệu chỉnh chương trình
b Lập trình bắt sự kiện (event-driven programming): Mã lệnh được
thực hiện vào lúc kích hoạt sự kiện
Nhiệm vụ của lập trình là để viết mã, được thực hiện về sự xuất hiện củacác sự kiện tự động, và loại lập trình này được gọi là lập trình bắt sự kiện.Trong chương trình này, lập trình viên không phải xác định làm thế nào để tạo
ra các đối tượng này, làm thế nào để đặt chúng trên màn hình và làm thế nào đểthay đổi thuộc tính của nó ,các lập trình viên chỉ cần tạo ra bằng cách sử dụnggiao diện đồ họa tích hợp trong các đối tượng / kiểm soát và ghi mã mà phảnứng với mỗi sự kiện xảy ra bởi các tương tác người dùng
Nói chung lập trình bắt sự kiện có nghĩa là làm cho một số hành độngthực hiện (thông qua một số chương trình / code) về sự xuất hiện của các sựkiện
c)Các tính năng điển hình của các sự kiện trong lập trình bắt sự kiện
Các sự kiện này thường được tham chiếu, hoặc đặt tên dựa trên một đốitượng và loại hành động đã kích hoạt sự kiện Ví dụ, "icon3_click" hoặc
"icon3 - onClick" Vì vậy, chúng thường có ít nhất hai "chìa khóa"
Thường thì có một đối tượng, tham số thiết lập, hoặc từ điển cấu trúcmảng đó là thông qua vào như một tham số có thể được sử dụng để tìm hiểuthêm về môi trường đã kích hoạt sự kiện Ví dụ, nó có thể chứa các phím tắthoặc chuột tọa độ tại thời điểm sự kiện gây ra
Trang 7Sự kiện thường trở lại trạng thái như là một chỉ số để xem các sự kiện đãthành công hay không Ví dụ, một sự kiện "onValidate" có thể trở về Truenếu một hình thức xác nhận thông qua hay sai nếu ngược lại Một cách khác
là trả về một chuỗi hoặc cấu trúc có chứa các thông báo lỗi (s) nếu có một vấn
đề phát hiện Không phải tất cả các sự kiện cần phải trả lại kết quả Một cáchtiếp cận là sử dụng cùng một mảng đầu vào là mảng đầu ra Như vậy, mã trả
về, thông báo lỗi, và đăng nhập có thể được trả lại mà không tạo ra biến mới.(Tên chính được dành riêng cho nó) Không có nguy cơ phá hoại các mụchiện có trong mảng, vì các đầu vào không được tái sử dụng
Sự kiện có thể thường xuyên tiếp xúc với cơ sở dữ liệu Ví dụ, trong mộtgiao diện một sự kiện có thể thay đổi màu sắc hoặc văn bản của một hộp nhậpliệu không liên quan đến sự kiện này
Sự kiện thường được coi là thủ tục mô-đun nhỏ Nổi bật nhất là chức năngnày có thể cho phép nhiều trong các sự kiện, nhưng một số hệ thống không chophép nhiều thói quen mỗi sự kiện, trừ khi gọi thư viện chia sẻ.Ví dụ: một ngônngữ như Pascal cho phép chức năng đơn giản hoá việc lồng nhau phạm vi vấn
đề
Một số quy tắc thông thường cần phải được thiết lập về những sự kiện được
ưu tiên nếu nhiều sự kiện được kích hoạt đồng thời
Khi tất cả các sự kiện chưa được xử lý, các đầu vào sau đó lại được tao ra,kết quả là sự kiện có thể tiếp tục
Các sự kiện này thường được phép kích hoạt sự kiện khác thông qua mộtAPI Một phép cẩn thận để tránh vòng lặp vô hạn
Ví dụ: Sử dụng hệ thống giao diện như sau:
o Sự kiện thành công hay thất bại (như kết quả xác thực)
o Thông báo lỗi (s) (có thể được sử dụng thay vì chỉ báo trạng thái)
o Các loại sự kiện cụ thể hoặc đối tượng gây ra (danh từ) thuộctính
o Login hoặc thông tin gỡ lỗi (được viết để đăng nhập tùy chọn)
Trang 8public class EventTest {
public static void main (String [] args) {
JFrame frame = new EventFrame ();
addWindowListener (new MainWindowListener ());
Container contenido = getContentPane ();
contenido.add (mới ButtonPanel ());
Trang 9private JButton redButton;
private JButton greenButton;
private JButton blueButton;
public ButtonPanel ()
{
redButton = new JButton ("Red");
greenButton = new JButton ("Green");
blueButton = new JButton ("Blue");
Obiect source = event.getSource ();
Color color = getBackground ();
if (source == redButton) {
color = Color.RED;
} Else if (source == greenButton) {
color = Color.GREEN;
} Else if (source == blueButton){
Trang 10color = Color.BLUE;
} setBackground (color);
Object source = event.getSource ();
Color color = getBackground ();
Trang 11Ví dụ 2: Một lớp duy nhất thực hiện 2 giao diện:
Ví dụ này tạo một cửa sổ mới với một nút bấm và một textbox Ví dụ xử lý sựkiện click và quản lý truy cập nội bộ để chỉ số lượng nhấp chuột
private int numClicks = 0;
public static void main (String [] args)
Trang 12{
dispose ();
System.exit (0);
}
public void windowOpened (WindowEvent e) {}
public void windowActivated (WindowEvent e) {}
public void windowIconified (WindowEvent e) {}
public void windowDeiconified (WindowEvent e) {}
public void windowDeactivated (WindowEvent e) {}
public void windowClosed (WindowEvent e) {}
}
Trong ví dụ này, có một lớp duy nhất thực hiện 2 giao diện:WindowListener và ActionListener ActionListener có một phương pháp độcđáo: ActionPerformed nhưng WindowListener có vài phương thức Khi bạn sửdụng giao diện với Java, nó là cần thiết để thực hiện tất cả các phương pháp.Trong trường hợp này, một số phương pháp được khai báo nhưng không có bất
kỳ mã bên trong
II MÔ HÌNH XỬ LÍ SỰ KIỆN
1 Giới thiệu chung:
Những sự kiện được phát sinh khi người dùng tương tác với giao diện chương trình (GUI) Những tương tác thường gặp như: di chuyển, nhấn chuột, nhấn một nút nhấn, chọn một MenuItem trong hệ thống thực đơn, nhập dữ liệu trong một ô văn bản, đóng cửa sổ ứng dụng, … Khi có một tương tác xảy ra thì một sự kiện được gởi đến chương trình Thông tin về sự kiện thường được lưu trữ trong một đối tượng dẫn xuất từ lớp AWTEvent Những kiểu sự kiện trong gói java.awt.event có thể dùng cho cả những component AWT và JFC Đối với thư
viện JFC thì có thêm những kiểu sự kiện mới trong gói java.swing.event
2 Mô hình ủy thác sự kiện
a Định nghĩa: Mô hình ủy thác sự kiện định nghĩa các cơ chế chuẩn và cố định để tạo và xử lý sự kiện Ý tưởng này rất đơn giản, nguồn tạo và gởi sự kiện tới một hay nhiều đích nhận, đích sẽ chờ đến khi nhận được sự kiện, nó sẽ
xử lý sự kiện và trả về giá trị Trong mô hình này, đích phải đăng ký với nguồn
Trang 13để nhận các thông báo về sự kiện, điều này cung cấp nhiều lợi điểm: các thông báo chỉ gửi đến các đích nghe cần nhận nó
b Ưu điểm mô hình này là phần chương trình xử lý sự kiện hoàn toàn tách biệt với giao diện người dùng nơi đã phát sinh ra các sự kiện Giao diện người dùng có thể ủy thác việc xử lý sự kiện cho các phần mã lệnh riêng rẽ
• Ta nhờ bác sĩ chữa bệnh (ủy thác xử lý sự kiện)
• Bác sĩ chờ (listen) ta đưa ra triệu chứng bệnh (đối tượng event) rồi dựa vào trạng thái của bệnh (đối tượng event) để xử lý phù hợp
• Có thể ta mắc nhiều bệnh có thể ủy thác chữa bệnh cho nhiều bác sĩ, mỗi bác sĩ một loại bệnh
• Một bác sĩ chữa bệnh như thế nào tùy thuộc vào quyết định của bác sĩ đó dựa trên tình hình thực tế của dược phẩm
Source Object
Trigger an event
Listener Object Register a listener object
EventObject
Event Handler
Notify listener Generate
an event User
action
Trang 143 Interface lắng nghe của gói java.awt.event
- Khi người dùng tác động lên thành phần giao tiếp (nhấn chuột, nhấn phím…)
sẽ sinh ra một sự kiện, Java sẽ gửi sự kiện này cho đối tượng lắng nghe sự kiện,đối tượng lắng nghe sự kiện sẽ gọi một phương thức đặc biệt để xử lý sự kiện
- Mỗi thành phần giao tiếp (đối tượng nguồn) cần phải đăng ký các đối tượng lắng nghe
sự kiện (đối tượng đích) và trong mỗi đối tượng đích cần cài đặt phương thức xử lý sự kiện (đối tượng nguồn và đối tượng đích đôi khi chỉ là một)
NGUỒN
SỰ KIỆN ĐƯỢC TẠO RA
Nhấn nút Button Jbutton ActionEvent
Thay đổi văn bản của textfield JtextComponent TextEvent
Nhấn enter trên textfield JtextComponent TextEvent
Chọn mục của combobox JCombobox ItemEvent, ActionEvent Chọn các mục của list Jlist ListSelectionEvent
Chọn mục của menu JmenuItem ActionEvent
Dời focus đến hoặc đi khỏi thành phần Component FocusEvent
Nhấn hoặc thả phím trên thành phần Component KeyEvent
Di chuyển chuột trên thành phần Component MouseEvent
Mở, đóng, phóng to, thu nhỏ cửa sổ Window WindowEvent
- đối tượng lắng nghe sự kiện (đối tượng đích cần dùng giao diện phù hợp để cung cấp phương thức xử lý sự kiện tương ứng) Thông thường sự kiện tên là Xevent thì đối tượng đích phải dùng giao diện Xlistener và phương thức đăng
ký là addListener
Ví dụ: Khi nhấn nút button (đối tượng nguồn) sẽ sinh ra sự kiện ActionEvent,
sự kiện này được gửi cho đối tượng lắng nghe sự kiện(đối tượng đích) Đối tượng nguồn dùng phương thức addActionEvent để đăng ký đối tượng đích, đối tượng đích dùng giao diện ActionEvent cung cấp phương thức
actionPerforment (actionevent e) để xử lý sự kiện ActionEvent
SỰ KIỆN DÙNG GIAO DIỆN PHƯƠNG THỨC XỬ LÝ
ActionEvent Actionlistener actionPerformed(ActionEvent e) Textevent Textlistener TextValueChanged (TextEvent e) ItemEvent ItemListener ItemStateChanged(ItemEven e)
Trang 15ListSelectionEvent ItemListener ItemStateChanged(ItemEven e) FocusEvent FocusListener focusGained (FocusEvent e)
focuslost (FocusEvent e) keyEvent KeyListener keyPressed (KeyEvent e)
keyReleased (KeyEvent e) keyType(KeyEvent e) MouseEvent MouseListener
MouseMonitonListener
mousePressed (MouseEvent e) mouseReleased (MouseEvent e) mouseClicked (MouseEvent e) mouseMoved (MouseEvent e) mouseDragged (MouseEvent e) windowEvent WindowListener Windowclosed(WindownEvent)
Windowopened(WindownEvent)
4 Các lớp xử lý các sự kiện
Hình 1: Các lớp xử lý sự kiện
Các lớp con của AWTEvent được chia thành hai nhóm:
1 Các lớp mô tả về ngữ nghĩa của các sự kiện,
TextEvent ItemEvent
PaintEvent
ListSelectionEvent