Bài giảng Nhập môn Java - Bài 6: Lập trình sự kiện
Các ví dụ mở đầu
Mô hình xử lý sự kiện
Các component nâng cao
Xử lý sự kiện chuột
Xử lý sự kiện bàn phím
Tóm tắt nội dung Bài giảng Nhập môn Java - Bài 6: Lập trình sự kiện, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
You have selected : " +Item.getLabel()); } } } VÍ DỤ 1: MENU ĐƠN GIẢN GV: Võ Tấn Dũng VÍ DỤ 2: (Checkbox Menu) import java.awt.*; import java.awt.event.*; public class MenuDemo extends Frame implements ActionListener, ItemListener { MenuBar mb; //File, Options, Help Menu fm, om, hm; //Options Sub-Menu Menu opSubm; //The MenuItem for exiting MenuItem exitItem; //An option that can be on or off CheckboxMenuItem cb; Label label; MenuDemo(String s) { super("MenuDemo: " + s); Container cp = this; cp.setLayout(new FlowLayout()); mb = new MenuBar(); setMenuBar(mb); // Frame implements MenuContainer //xem tiếp ở slide tiếp theo GV: Võ Tấn Dũng VÍ DỤ 2: (Checkbox Menu) MenuItem mi; // The File Menu... fm = new Menu("File"); fm.add(mi = new MenuItem("Open", new MenuShortcut('O'))); mi.addActionListener(this); fm.add(mi = new MenuItem("Close", new MenuShortcut('W'))); mi.addActionListener(this); fm.addSeparator(); fm.add(mi = new MenuItem("Print", new MenuShortcut('P'))); mi.addActionListener(this); fm.addSeparator(); fm.add(mi = new MenuItem("Exit", new MenuShortcut('Q'))); exitItem = mi; // save for action handler mi.addActionListener(this); mb.add(fm); //xem tiếp ở slide tiếp theo GV: Võ Tấn Dũng // The Options Menu... om = new Menu("Options"); cb = new CheckboxMenuItem("AutoSave"); cb.setState(true); cb.addItemListener(this); om.add(cb); opSubm = new Menu("SubOptions"); opSubm.add(new MenuItem("Alpha")); opSubm.add(new MenuItem("Gamma")); opSubm.add(new MenuItem("Delta")); om.add(opSubm); mb.add(om); // The Help Menu... hm = new Menu("Help"); hm.add(mi = new MenuItem("About")); mi.addActionListener(this); hm.add(mi = new MenuItem("Topics")); mi.addActionListener(this); mb.add(hm); mb.setHelpMenu(hm); // needed for portability (Motif, etc.). // the main window label = new Label("Menu Demo Window"); label.setSize(200, 150); cp.add(label); pack(); } //xem tiếp ở slide tiếp theo VÍ DỤ 2: (Checkbox Menu) GV: Võ Tấn Dũng /** Handle action events. */ public void actionPerformed(ActionEvent evt) { // System.out.println("Event " + evt); String cmd; if ((cmd = evt.getActionCommand()) == null) System.out.println("You chose a menu shortcut"); else System.out.println("You chose " + cmd); Object cmp = evt.getSource(); // System.out.println("Source " + cmp); if (cmp == exitItem) System.exit(0); } /** The CheckBoxMenuItems send a different message */ public void itemStateChanged(ItemEvent e) { System.out.println("AutoSave is set " + cb.getState()); } public static void main(String[] arg) { new MenuDemo("Testing 1 2 3...").setVisible(true); } } VÍ DỤ 2: (Checkbox Menu) GV: Võ Tấn Dũng VÍ DỤ 3: (Popup Menu) class PopupMenuDemo extends Frame { PopupMenu pMenu = new PopupMenu(); MenuItem mnuCopy = new MenuItem("Copy"); MenuItem mnuCut = new MenuItem("Cut"); MenuItem mnuPaste = new MenuItem("Paste"); PopupMenuDemo() // Constructor of a frame { ... pMenu.add(mnuCopy); // setup popup menu pMenu.addSeparator(); pMenu.add(mnuCut); pMenu.addSeparator(); pMenu.add(mnuPaste); // Add popup menu to the frame this.add(pMenu); //xem tiếp ở slide tiếp theo GV: Võ Tấn Dũng VÍ DỤ 3: (Popup Menu) // In constructor of a frame // Add mouse Listener for showing popup menu addMouseListener ( new MouseAdapter() { public void mouseReleased(MouseEvent e) { if (e.isPopupTrigger()) // check right clicked pMenu.show(e.getComponent(), e.getX(),e.getY()); } } ); The right-clicked position PHẦN 4 XỬ LÝ SỰ KIỆN CHUỘT GV: Võ Tấn Dũng GV: Võ Tấn Dũng XỬ LÝ SỰ KIỆN CHUỘT Java cung cấp hai intefaces lắng nghe (bộ lắng nghe sự kiện chuột) là MouseListener và MouseMotionListener để quản lý và xử lý các sự kiện liên quan đến thiết bị chuột. Những sự kiện chuột có thể “bẫy” cho bất kỳ component nào trên GUI mà dẫn xuất từ java.awt.component. GV: Võ Tấn Dũng XỬ LÝ SỰ KIỆN CHUỘT Các phương thức của interface MouseListener: public void mousePressed(MouseEvent event): được gọi khi một nút chuột được nhấnvà con trỏ chuột ở trên component. public void mouseClicked(MouseEvent event): được gọi khi một nút chuột được nhấn và nhả trên component mà không di chuyển chuột. public void mouseReleased(MouseEvent event): được gọi khi một nút chuột nhả sa khi kéo rê. public void mouseEntered(MouseEvent event): được gọi khi con trỏ chuột vào trong đường biên của một component. public void mouseExited(MouseEvent event): được gọi khi con trỏ chuột ra khỏi đường biên của một component. GV: Võ Tấn Dũng XỬ LÝ SỰ KIỆN CHUỘT Các phương thức của interface MouseMotionListener: public void mouseDragged(MouseEvent even ): phương thức này được gọi khi người dùng nhấn một nút chuột và kéo trên một component. public void mouseMoved(MouseEvent event): phương thức này được gọi khi di chuyển chuột trên component. Mỗi phương thức xử lý sự kiện chuột có một tham số. MouseEvent chứa thông tin về sự kiện chuột phát sinh chẳng hạn như: tọa độ x, y nơi sự kiện chuột xảy ra. Những phương thức tương ứng trong các interfaces sẽ tự động được gọi khi chuột tương tác với một component. GV: Võ Tấn Dũng XỬ LÝ SỰ KIỆN CHUỘT Ví dụ: Chương trình tên MouseTracker bên dưới minh họa việc dùng những phương thức của các interfaces MouseListener và MouseMotionListener để “bẫy” và xử lý các sự kiện chuột tương ứng. import java.awt.*; import java.awt.event.*; public class MouseTracker extends Frame implements MouseListener, MouseMotionListener { private Label statusBar; public MouseTracker() { super( "Demonstrating Mouse Events" ); statusBar = new Label(); this.add( statusBar, BorderLayout.SOUTH ); addMouseListener( this ); addMouseMotionListener( this ); setSize( 275, 100 ); setVisible( true ); } public void mouseClicked( MouseEvent event ) { String str_bt = new String(); int count = event.getClickCount(); int mousebutton = event.getButton(); if(mousebutton == MouseEvent.BUTTON1) str_bt = "left mouse button"; if(mousebutton == MouseEvent.BUTTON3) str_bt = "right mouse button"; if(mousebutton == MouseEvent.BUTTON2) str_bt = "middle mouse button"; statusBar.setText(str_bt + " clicked at (" + event.getX() + "," + event.getY() + ")" + count + " lan"); } //xem ở slide kế tiếp GV: Võ Tấn Dũng XỬ LÝ SỰ KIỆN CHUỘT public void mousePressed( MouseEvent event ) { statusBar.setText("Pressed at [" + event.getX() + ", " + event.getY() + "]" ); } public void mouseReleased( MouseEvent event ) { statusBar.setText("Released at [" + event.getX() + ", " + event.getY() + "]" ); } public void mouseEntered( MouseEvent event ) { statusBar.setText( "Mouse in window" ); } public void mouseExited( MouseEvent event ) { statusBar.setText( "Mouse outside window" ); } public void mouseDragged( MouseEvent event ) { statusBar.setText("Dragged at [" + event.getX() + ", " + event.getY() + "]" ); } public void mouseMoved( MouseEvent event ) { statusBar.setText("Moved at [" + event.getX() + ", " + event.getY() + "]" ); } public static void main( String args[] ) { MouseTracker application = new MouseTracker(); } } PHẦN 5 XỬ LÝ SỰ KIỆN BÀN PHÍM GV: Võ Tấn Dũng GV: Võ Tấn Dũng XỬ LÝ SỰ KIỆN BÀN PHÍM Để xử lý sự kiện bàn phím java hỗ trợ một bộ lắng nghe sự kiện đó là interface KeyListener. Một sự kiện bàn phím được phát sinh khi người dùng nhấn và nhả một phím trên bàn phím. Một lớp hiện thực KeyListener phải cài đặt các phương thức keyPressed, keyReleased và keyTyped. Mỗi phương thức này có một tham số là một đối tượng kiểu KeyEvent. KeyEvent là lớp con của lớp InputEvent. GV: Võ Tấn Dũng XỬ LÝ SỰ KIỆN BÀN PHÍM Các phương thức của interface KeyListener Phương thức keyPressed được gọi khi một phím bất kỳ được nhấn. Phương thức keyTyped được gọi thực hiện khi người dùng nhấn một phím không phải “phím hành động” (như phím mũi tên, phím Home, End, Page Up, Page Down, các phím chức năng như: Num Lock, Print Screen, Scroll Lock, Caps Lock, Pause). Phương thức keyReleased được gọi thực hiện khi nhả phím nhấn sau khi sự kiện keyPressed hoặc keyTyped GV: Võ Tấn Dũng XỬ LÝ SỰ KIỆN BÀN PHÍM Ví dụ: minh họa việc xử lý sự kiện chuột thông qua các phương thức của interface KeyListener. Lớp KeyDemo bên dưới hiện thực interface KeyListener, vì vậy tất cả 3 phương thức trong KeyListener phải được cài đặt trong chương trình. // KeyDemo.java // Demonstrating keystroke events. // Java core packages import java.awt.*; import java.awt.event.*; public class KeyDemo extends Frame implements KeyListener { private String line1 = "", line2 = ""; private String line3 = ""; private TextArea textArea; //xem tiếp ở slide tiếp theo GV: Võ Tấn Dũng XỬ LÝ SỰ KIỆN BÀN PHÍM // set up GUI public KeyDemo() { super( "Demonstrating Keystroke Events" ); textArea = new TextArea( 10, 15 ); // set up TextArea textArea.setText( "Press any key on the keyboard..." ); textArea.setEnabled( false ); this.add( textArea ); addKeyListener( this ); // allow frame to process Key events setSize( 350, 100 ); setVisible( true ); } // handle press of any key public void keyPressed( KeyEvent event ) { line1 = "Key pressed: " + event.getKeyText( event.getKeyCode() ); setLines2and3( event ); } //xem tiếp ở slide tiếp theo GV: Võ Tấn Dũng XỬ LÝ SỰ KIỆN BÀN PHÍM // handle release of any key public void keyReleased( KeyEvent event ) { line1 = "Key released: " + event.getKeyText( event.getKeyCode() ); setLines2and3( event ); } // handle press of an action key public void keyTyped( KeyEvent event ) { line1 = "Key typed: " + event.getKeyChar(); setLines2and3( event ); } //xem tiếp ở slide tiếp theo GV: Võ Tấn Dũng XỬ LÝ SỰ KIỆN BÀN PHÍM // set second and third lines of output private void setLines2and3( KeyEvent event ) { line2 = "This key is " + ( event.isActionKey() ? "" : "not" ) + "an action key"; String temp = event.getKeyModifiersText(event.getModifiers() ); line3 = "Modifier keys pressed: " + ( temp.equals( "" )?"none" : temp ); textArea.setText(line1+"\n"+line2+"\n"+ line3+"\n" ); } // execute application public static void main( String args[] ) { KeyDemo application = new KeyDemo(); } } // end class KeyDemo HẾT BÀI 6 GV: Võ Tấn Dũng
File đính kèm:
- Bài giảng Nhập môn Java - Bài 6_Lập trình sự kiện.ppt