Java事件處理是采用“委派事件模型”。是指當事件發送時,生產事件的對象(即事件源),會把此“信息”傳遞給“事件監聽者”處理的一種方式,而這里所說的“信息”實踐上就是java.awt.event事件類庫里某個類所創建的對象,我們暫時把它稱為“事件的對象”。一個事件源可被多個監聽者監聽。
一個類要實現監聽者的步驟
Ⅰ.實現相對應的接口[KeyListener,MouseListener,ActionLister,WindowListener]
Ⅱ.把接口的處理方法根據需要重新編寫
Ⅲ.在事件源注冊監聽
Ⅳ.事件傳到是靠事件對象
事件類型
接口名稱 |
事件類 |
接口方法及說明 |
ActionListener |
ActionEvent動作事件類
|
actionPerformed(ActionEvent e) 單擊按鈕、選擇菜單項或在文本框中按回車時 |
AdjustmentListener |
AdjustmentEvent調整事件類
|
adjustmentValueChanged(AdjustmentEvent e) 當改變滾動條滑塊位置時 |
ComponentListener |
ComponentEvent組件事件類
|
componentMoved(ComponentEvent e)組件移動時 componentHidden(ComponentEvent e)組件隱藏時 componentResized(ComponentEvent e)組件縮放時 componentShown(ComponentEvent e)組件顯示時 |
ContainerListener |
ContainerEvent容器事件類
|
componentAdded(ContainerEvent e)添加組件時 componentRemoved(ContainerEvent e) 移除組件時 |
FocusListener |
FocusEvent焦點事件類 |
focusGained(FocusEvent e)組件獲得焦點時 focusLost(FocusEvent e)組件失去焦點時 |
ItemListener | ItemEvent選擇事件類
|
itemStateChanged(ItemEvent e) 選擇復選框、選項框、單擊列表框、選中帶復選框菜單時 |
KeyListener | KeyEvent鍵盤事件類
|
keyPressed(KeyEvent e)鍵按下時 keyReleased(KeyEvent e) 鍵釋放時 keyTyped(KeyEvent e)擊鍵時 |
MouseListener | MouseEvent鼠標事件類
|
mouseClicked(MouseEvent e) 單擊鼠標時 mouseEntered(MouseEvent e)鼠標進入時 mouseExited(MouseEvent e)鼠標離開時 mousePressed(MouseEvent e)鼠標鍵按下時 mouseReleased(MouseEvent e) 鼠標鍵釋放時 |
MouseMotionListener | MouseEvent鼠標移動事件類
|
mouseDragged(MouseEvent e)鼠標拖放時 mouseMoved(MouseEvent e)鼠標移動時 |
TextListener | TextEvent文本事件類
|
textValueChanged(TextEvent e) 文本框、多行文本框內容修改時 |
WindowListener | WindowEvent窗口事件類
|
windowOpened(WindowEvent e)窗口打開后 windowClosed(WindowEvent e)窗口關閉后 windowClosing(WindowEvent e)窗口關閉時 windowActivated(WindowEvent e)窗口激活時 windowDeactivated(WindowEvent e) 窗口失去焦點時 windowIconified(WindowEvent e)窗口最小化時 windowDeiconified(WindowEvent e) 最小化窗口還原時 |
1 /* 2 * 作者:白客C 3 * 時間:2020年03月08日 4 * 功能:事件處理機制 5 */ 6 7 package com.beekc.www; 8 import java.awt.*; 9 import javax.swing.*; 10 import java.awt.event.*; 11 12 //繼承JFanme,實現ActionListener接口實現該類方法 13 public class Beekc extends JFrame implements ActionListener{ 14 15 //定義組件 16 MyPanel myPanel =null; 17 JButton jb1 = null,jb2 = null; 18 19 public static void main(String[] args) { 20 Beekc beekc = new Beekc(); 21 } 22 23 //構造函數 24 public Beekc() 25 { 26 //創建組件 27 myPanel = new MyPanel(); 28 jb1 = new JButton("黑色"); 29 jb2 = new JButton("紅色"); 30 31 //設置布局管理器 32 33 //添加組件 34 this.add(jb1,BorderLayout.NORTH); 35 this.add(myPanel); 36 myPanel.setBackground(Color.BLACK); 37 this.add(jb2,BorderLayout.SOUTH); 38 39 //注冊監聽 40 //this是監聽者;jb1是事件源 41 jb1.addActionListener(this); 42 Cat cat =new Cat(); 43 //貓貓也是監聽者 44 jb1.addActionListener(cat); 45 //指定action命令 46 jb1.setActionCommand("BLACK"); 47 48 jb2.addActionListener(this); 49 jb2.addActionListener(cat); 50 jb2.setActionCommand("RED"); 51 52 //設置窗體 53 this.setTitle("事件設置機制"); 54 this.setSize(300,200); 55 this.setResizable(false); 56 this.setLocation(200,200); 57 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 58 59 //顯示 60 this.setVisible(true); 61 } 62 63 //實現接口的方法 64 //事件處理方法 65 @Override 66 public void actionPerformed(ActionEvent actionEvent) { 67 if(actionEvent.getActionCommand().equals("BLACK")) 68 { 69 System.out.println("你點擊了黑色"); 70 myPanel.setBackground(Color.BLACK); 71 72 }else if(actionEvent.getActionCommand().equals("RED")) 73 { 74 System.out.println("你點擊了紅色"); 75 myPanel.setBackground(Color.RED); 76 }else{ 77 78 } 79 } 80 } 81 82 //我的面板 83 class MyPanel extends Panel 84 { 85 //覆蓋paint 86 public void paint(Graphics g) 87 { 88 super.paint(g); 89 } 90 } 91 92 //貓貓 93 class Cat implements ActionListener 94 { 95 @Override 96 //事件處理方法 97 public void actionPerformed(ActionEvent actionEvent) { 98 if(actionEvent.getActionCommand().equals("BLACK")) 99 { 100 System.out.println("貓貓點擊了黑色"); 101 //myPanel.setBackground(Color.BLACK); 102 103 }else if(actionEvent.getActionCommand().equals("RED")) 104 { 105 System.out.println("貓貓點擊了紅色"); 106 //myPanel.setBackground(Color.RED); 107 }else{ 108 109 } 110 } 111 }
事件接口實例
1 /* 2 * 作者:白客C 3 * 時間:2020年03月08日 4 * 內容:事件接口處理 5 */ 6 7 package com.beekc.www; 8 9 import java.awt.*; 10 import javax.swing.*; 11 import java.awt.event.*; 12 13 //繼承JFanme 14 public class Beekc extends JFrame{ 15 16 //定義組件 17 MyJPanel myJPanel = null; 18 19 public static void main(String[] args) 20 { 21 Beekc beekc = new Beekc(); 22 } 23 24 //構造函數 25 public Beekc(){ 26 //創建組件 27 myJPanel = new MyJPanel(); 28 29 //設置布局管理器 30 //添加組件 31 this.add(myJPanel); 32 33 //注冊監聽 34 this.addMouseListener(myJPanel); 35 this.addKeyListener(myJPanel); 36 this.addMouseMotionListener(myJPanel); 37 this.addWindowListener(myJPanel); 38 39 //設置窗體 40 this.setSize(400,300); 41 this.setLocation(200,200); 42 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 43 44 //顯示 45 this.setVisible(true); 46 } 47 48 } 49 50 //我的面板,繼承多個事件類接口 51 class MyJPanel extends JPanel implements MouseListener,KeyListener,MouseMotionListener,WindowListener{ 52 53 //覆蓋paint函數 54 public void paint(Graphics g) 55 { 56 //畫筆 57 super.paint(g); 58 } 59 60 @Override 61 //鼠標被點擊 62 public void mouseClicked(MouseEvent mouseEvent) { 63 System.out.println("鼠標點擊了 x = " + mouseEvent.getX() + "y = " + mouseEvent.getY()); 64 } 65 66 @Override 67 //鼠標按下 68 public void mousePressed(MouseEvent mouseEvent) { 69 System.out.println("鼠標按下了"); 70 } 71 72 @Override 73 //鼠標松開 74 public void mouseReleased(MouseEvent mouseEvent) { 75 System.out.println("鼠標松開了"); 76 } 77 78 @Override 79 //鼠標被移動到界面 80 public void mouseEntered(MouseEvent mouseEvent) { 81 System.out.println("鼠標來了"); 82 } 83 84 @Override 85 //鼠標離開界面 86 public void mouseExited(MouseEvent mouseEvent) { 87 System.out.println("鼠標離開了"); 88 } 89 90 @Override 91 //鍵輸入 比如q,w 92 public void keyTyped(KeyEvent keyEvent) { 93 94 } 95 96 @Override 97 //鍵按下 98 public void keyPressed(KeyEvent keyEvent) { 99 System.out.println(keyEvent.getKeyChar() + "被按下"); 100 } 101 102 @Override 103 //鍵松開 104 public void keyReleased(KeyEvent keyEvent) { 105 106 } 107 108 @Override 109 //鼠標拖拽 110 public void mouseDragged(MouseEvent mouseEvent) { 111 112 } 113 114 @Override 115 //鼠標移動 116 public void mouseMoved(MouseEvent mouseEvent) { 117 //System.out.println("鼠標當前位置 x = " + mouseEvent.getX() + "y = " + mouseEvent.getY()); 118 } 119 120 @Override 121 //窗口打開 122 public void windowOpened(WindowEvent windowEvent) { 123 System.out.println("窗口被打開"); 124 } 125 126 @Override 127 //窗口正在關閉 128 public void windowClosing(WindowEvent windowEvent) { 129 System.out.println("窗口正在被關閉"); 130 } 131 132 @Override 133 //窗口關閉 134 public void windowClosed(WindowEvent windowEvent) { 135 System.out.println("窗口被關閉"); 136 } 137 138 @Override 139 //窗口最小化時 140 public void windowIconified(WindowEvent windowEvent) { 141 System.out.println("窗口被最小化"); 142 } 143 144 @Override 145 //窗口最小化后被還原 146 public void windowDeiconified(WindowEvent windowEvent) { 147 System.out.println("窗口被還原"); 148 } 149 150 @Override 151 //窗口激活了 152 public void windowActivated(WindowEvent windowEvent) { 153 System.out.println("窗口激活了"); 154 } 155 156 @Override 157 //窗口失去焦點時 158 public void windowDeactivated(WindowEvent windowEvent) { 159 System.out.println("窗口失去焦點"); 160 } 161 }
移動的小球實例
1 /* 2 * 作者:白客C 3 * 時間:2020年03月08日 4 * 功能:用方向盤控制小球移動 5 * 內容:加深對事件機制處理的理解 6 */ 7 8 package com.beekc.www; 9 import java.awt.*; 10 import javax.swing.*; 11 import java.awt.event.*; 12 13 //繼承JFanme 14 public class Beekc extends JFrame{ 15 16 //定義組件 17 MyPanel myPanel = null; 18 public static void main(String[] args){ 19 Beekc beekc = new Beekc(); 20 } 21 22 //構造函數 23 public Beekc() 24 { 25 //創建組件 26 myPanel = new MyPanel(); 27 28 //設置布局管理器 29 30 //添加組件 31 this.add(myPanel); 32 33 //注冊監聽鍵盤 34 this.addKeyListener(myPanel); 35 36 //設置窗口 37 this.setTitle("移動的小球"); 38 this.setSize(400,300); 39 this.setLocation(200,200); 40 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 41 42 //顯示 43 this.setVisible(true); 44 45 46 } 47 48 } 49 50 //我的面板 51 class MyPanel extends JPanel implements KeyListener 52 { 53 //界面的x軸,y軸 54 int x = 10; 55 int y = 10; 56 //小球的速度 57 int speed = 5; 58 //覆蓋paint函數 59 public void paint(Graphics g) 60 { 61 super.paint(g); 62 //畫出小球 63 g.fillOval(x,y,10,10); 64 } 65 66 @Override 67 //鍵盤的一個值被輸出 68 public void keyTyped(KeyEvent keyEvent) { 69 70 } 71 72 @Override 73 //鍵盤被按下 74 public void keyPressed(KeyEvent keyEvent) { 75 //小球方向 76 if(keyEvent.getKeyCode() == keyEvent.VK_DOWN) 77 { 78 //向下 79 y+=speed; 80 }else if(keyEvent.getKeyCode() == keyEvent.VK_UP) 81 { 82 //向上 83 y-=speed; 84 }else if(keyEvent.getKeyCode() == keyEvent.VK_LEFT) 85 { 86 //向左 87 x-=speed; 88 }else if(keyEvent.getKeyCode() == keyEvent.VK_RIGHT) 89 { 90 //向右 91 x+=speed; 92 } 93 94 //調用repaint(),重繪界面 95 this.repaint(); 96 } 97 98 @Override 99 //鍵盤被釋放 100 public void keyReleased(KeyEvent keyEvent) { 101 102 } 103 }