JAVA事件處理


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 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM