鼠標和鍵盤監聽器 窗體事件 圖形化管理界面 22

 鼠標監聽事件
 
--public interface MouseListenerextends EventListener用於接收組件上“感興趣”的鼠標事件
(按下、釋放、單擊、進入或離開)的偵聽器接口。(要跟蹤鼠標移動和鼠標拖動,請使用 MouseMotionListener。)

--旨在處理鼠標事件的類要麼實現此接口(及其包含的所有方法),要麼擴展抽象類 MouseAdapter(僅重寫所需的方法)。

--然後使用組件的 addMouseListener 方法將從該類所創建的偵聽器對象向該組件註冊。當按下、釋放或單擊(按下並釋放)
鼠標時會生成鼠標事件。鼠標光標進入或離開組件時也會生成鼠標事件。發生鼠標事件時,將調用該偵聽器對象中的相應方法,
並將 MouseEvent 傳遞給該方法。

 --mouseClicked(MouseEvent e) 鼠標按鍵在組件上單擊(按下並釋放)時調用。
 --mouseEntered(MouseEvent e) 鼠標進入到組件上時調用。
 --mouseExited(MouseEvent e) 鼠標離開組件時調用。
 --mousePressed(MouseEvent e) 鼠標按鍵在組件上按下時調用。
 --mouseReleased(MouseEvent e) 鼠標按鈕在組件上釋放時調用。
 
 //---鼠標的單擊次數,屬於鼠標事件內的,鼠標事件產生以後才行 。所以找MouseEvent
 
  public class MouseEventextends InputEvent指示組件中發生鼠標動作的事件。當且僅當動作發生時,
   鼠標光標處於特定組件邊界未被遮掩的部分之上時才認爲在該組件上發生了鼠標動作。組件邊界可以被可見組件的子組件、
   菜單或頂層窗口所遮掩。此事件既可用於鼠標事件(單擊、進入、離開),又可用於鼠標移動事件(移動和拖動)。

  通過組件對象可爲下列活動生成此低級別的事件:

  鼠標事件
  按下鼠標按鍵
  釋放鼠標按鍵
  單擊鼠標按鍵(按下並釋放)
  鼠標光標進入組件幾何圖形的未遮掩部分
  鼠標光標離開組件幾何圖形的未遮掩部分
  鼠標移動事件
  移動鼠標
  拖動鼠標
  MouseEvent 對象被傳遞給每一個 MouseListener 或 MouseAdapter 對象,這些對象使用組件的
  addMouseListener 方法註冊,以接收“令人感興趣”鼠標事件。(MouseAdapter 對象實現
  MouseListener 接口。)所有此類偵聽器對象都獲得包含鼠標事件的 MouseEvent。
  
  MouseEvent 對象還傳遞給每一個使用組件的 addMouseMotionListener 方法註冊接收鼠標移動事件
  的 MouseMotionListener 或 MouseMotionAdapter 方法。(MouseMotionAdapter 對象
  實現 MouseMotionListener 接口。)所有此類偵聽器對象都獲得包含鼠標移動事件的 MouseEvent。

  //使用構造方法獲得鼠標單擊的次數
   ----getClickCount() 返回與此事件關聯的鼠標單擊次數。

  --鍵盤監聽器
  public interface KeyListener extends EventListener用於接收鍵盤事件(擊鍵)的偵聽器接口。
  旨在處理鍵盤事件的類要麼實現此接口(及其包含的所有方法),要麼擴展抽象 KeyAdapter 類(僅重寫有用的方法)。
  然後使用組件的 addKeyListener 方法將從該類所創建的偵聽器對象向該組件註冊。按下、釋放或鍵入鍵時生成鍵盤事件。
  然後調用偵聽器對象中的相關方法並將該 KeyEvent 傳遞給它。
   --keyPressed(KeyEvent e) 按下某個鍵時調用此方法。
   --keyReleased(KeyEvent e) 釋放某個鍵時調用此方法。
   --keyTyped(KeyEvent e) 鍵入某個鍵時調用此方法。
   
  public class KeyEvent extends InputEvent指示組件中發生擊鍵的事件。
  當按下、釋放或鍵入某個鍵時,由組件對象(如文本字段)生成此低級別事件。該事件被傳遞給每一個 KeyListener 或
  KeyAdapter 對象,這些對象使用組件的 addKeyListener 方法註冊,以接收此類事件。(KeyAdapter 對象
  實現 KeyListener 接口。)發生事件時,所有此類偵聽器對象都獲取此 KeyEvent。


  public class TextField extends TextComponent
  TextField 對象是允許編輯單行文本的文本組件。
   --TextField()  構造新文本字段。
   --TextField(int columns) 構造具有指定列數的新的空文本字段。
   --TextField(String text) 構造使用指定文本初始化的新文本字段。
   --TextField(String text, int columns) 構造使用要顯示的指定文本初始化的新文本字段,寬度足夠容納指定列數。


*/
import java.awt.*;

import java.awt.event.*;

public class MouseAndKeyEvent {
 
 //定義該圖形中所需的組件的引用。
 private Frame f;
 private Button but;
 private TextField tf;
 
 //構造函數裏面 一初始化 圖形化界面 就具備了基本事件
 MouseAndKeyEvent()
 {
  init();
 }
 
 //先不要寫組件,把組件和圖形化界面分離出來
 public void init()
 {
  f = new Frame("my frame");
  
  //對frame進行基本設置。
  //public void setBounds(int x,int y,int width,int height)重繪組件的指定矩形區域。
  f.setBounds(300, 100, 600, 500);
  
  //流式佈局管理器  從左到右的順序排列
  f.setLayout(new FlowLayout());
  
  //添加文本框  裏面的20 設置長度  --TextField(int columns) 構造具有指定列數的新的空文本字段。
  tf = new TextField(20);
  
  but = new Button("my button");
  
  f.add(tf);
  //將組件添加到frame中
  f.add(but);
  
  //在顯示窗體之前加載顯示窗體事件
  myEvent();
  
  
  //顯示窗體
  f.setVisible(true);    
 }
 

 //事件
 private void myEvent()
 {
  //匿名內部類
  f.addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)//返回窗體時間
   {
    System.exit(0);
   }
  } );
  
  tf.addKeyListener(new KeyAdapter()
  {   
   public void keyPressed(KeyEvent e)
   {
    int code = e.getKeyCode();
    if(!(code >= KeyEvent.VK_0 && code <= KeyEvent.VK_9))
    {
     //如果不是1到9之間的數字 則不輸入 並打印字符非法
     //KeyEvent 父類 InputEvent 下 方法 
     //void consume() 使用此事件,以便不會按照默認的方式由產生此事件的源代碼來處理此事件。
     
     System.out.println(code + "....是非法的");
     //屏蔽件
     e.consume();
    }
   }
  });
  
  //給but添加一個鍵盤監聽。
  but.addKeyListener(new KeyAdapter()
  {
   public void keyPressed(KeyEvent e)
   {
    //getKeyCode() 返回與此事件中的鍵相關聯的整數 keyCode。
    //getKeyChar() 返回與此事件中的鍵相關聯的字符。    
    //System.out.println(e.getKeyChar()+"....."+e.getKeyCode());
    //d.....68 ?.....16
    
    //getKeyText(int keyCode) 返回描述 keyCode 的 String,如“HOME”、“F1”或“A”。    
    //System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"....."+e.getKeyCode());
    //結果 D.....68  Shift.....16 Escape.....27
    
    //按ESC鍵退出程序
    //if(e.getKeyCode()==27) 
    //if(e.getKeyCode()==KeyEvent.VK_ESCAPE);
    
    //按CTRL鍵+回車鍵 進行操作
    if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER);
     //System.exit(0);
    System.out.println("CTRL鍵+回車鍵 ");
     
    /* 
      按CTRL鍵+回車鍵 進行操作
          
     public abstract class InputEvent extends ComponentEvent所有組件級別輸入事件的根事件類。
      輸入事件通常由產生輸入事件的源代碼進行處理,而在此之前,將他們提交到偵聽器中。這樣就允許偵聽器和組件子類“使用”
      事件,以便源代碼不會以默認方式處理事件。例如,在 Button 組件上使用 mousePressed 事件將阻止 Button 被激活。
     
     --boolean isControlDown()  返回 Control 修飾符在此事件上是爲 down。  
   
    */
   }
  });
  
  //在該按鈕上添加鼠標監聽器
  but.addMouseListener(new MouseAdapter()
  {
   private int count = 1;
   private int clickcount = 1;
   //鼠標劃過一次 打印一次
   public void mouseEntered(MouseEvent e)
   {
    System.out.println("鼠標進入到該組件"+count++);
   }
   
   //鼠標點擊一次打印一次
   public void mouseClicked(MouseEvent e)
   {
    if(e.getClickCount()==2){
    System.out.println("雙擊動作"+clickcount++);
    }
    //System.out.println("點擊動作"+clickcount++);
   }
  });
  
  but.addActionListener(new ActionListener()    
  {
   //重寫父類的方法actionPerformed
   public void actionPerformed(ActionEvent e)
   {
    System.out.println("按鈕。退出");
    
   }   
  });
  
 
 }
 
 public static void main(String[] args) {
  new MouseAndKeyEvent();
 }

 

}

 

 

package day22;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class FrameDemo {
 
 //定義該圖形中所需的組件的引用。
 private Frame f;
 private Button but;
 
 //構造函數裏面 一初始化 圖形化界面 就具備了基本事件
 FrameDemo()
 {
  init();
 }
 
 //先不要寫組件,把組件和圖形化界面分離出來
 public void init()
 {
  f = new Frame("my frame");
  
  //對frame進行基本設置。
  //public void setBounds(int x,int y,int width,int height)重繪組件的指定矩形區域。
  f.setBounds(300, 100, 600, 500);
  
  //流式佈局管理器  從左到右的順序排列
  f.setLayout(new FlowLayout());
  
  but = new Button("my button");
  
  //將組件添加到frame中
  f.add(but);
  
  //在顯示窗體之前加載顯示窗體事件
  myEvent();
  
  
  //顯示窗體
  f.setVisible(true);    
 }
 
 //事件
 private void myEvent()
 {
  //匿名內部類
  f.addWindowListener(new WindowAdapter()
  {
   public void windowClosing(WindowEvent e)//返回窗體時間
   {
    System.exit(0);
   }
  } );
  
  //讓按鈕具備退出程序的功能
  //按鈕就是事件源
  //那麼選擇哪一個監聽器呢
  //通過關閉狀體實例瞭解到,想要知道哪個組件具備什麼樣的特有監聽器
  //需要查看該組件對象的功能。
  
  /*
   Button類 下的  活動監聽器  通過查閱Button的API描述。發現支持  addActionListener 監聽
   public void addActionListener(ActionListener l)添加指定的操作偵聽器,
   以接收來自此按鈕的操作事件。當用戶在此按鈕上按下或釋放鼠標時,發生操作事件。如果 l 爲 null,
   則不拋出任何異常,也不執行任何操作。
  
        */ 
  but.addActionListener(new ActionListener()    
  {
   public void actionPerformed(ActionEvent e)
   {
    System.out.println("按鈕。退出");
    System.exit(0);
   }   
  });
 }
 
 
 public static void main(String[] args) {
  
  //直接 new
  new FrameDemo();
 }

}


 

發佈了45 篇原創文章 · 獲贊 7 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章