键盘监听器和鼠标监听器

    技术2022-05-20  38

    键盘监听器和鼠标监听器 

    键盘监听器

    键盘监听器KeyListener用来监听键盘事件。键盘事件有三种:KEY_PRESSED键按下了,KEY_RELEASED键松开了,KEY_TYPED键按过了。每个键都有一个键码,普通键的键码就是ASCII码。键码可通过int getKeyCode()方法获得。Java设置了一种“虚拟键码”(Virtual Key Code),用“VK_”作为前缀,例如VK_G。下面是某些特殊键的虚拟键码。

    键码

    含义

    键码

    含义

    VK_LEFT/VK_RIGHT左右方向键VK_CONTROLCtrl键VK_KP_UP小键盘向上VK_ATLAlt键VK_PAUSE暂停键VK_SHIFTShift键VK_NUMBER0小键盘数字0VK_F1功能键F1VK_0数字键0VK_B字母键B 

    虚拟键码对应的是键位,不区分大小写。要想知道大小写还必须查看修饰键(modifier key)。这由输入事件InputEvent的getModifere()方法得到,把返回值与常量SHIFT_MASK, CONTROL_MASK, ALT_MASK比较,用以判定哪个修饰键处于“同时按下”状态。

    监听器KeyListener有三个方法keyPressed(KeyEvent evt),keyReleased(KeyEvent evt),keyTyped(KeyEvent evt),分别用于相应事件发生后的处理。下面的例程中给自己的键盘监听器建立了showKeyEventMsg方法来显示按键信息。除了getKeyCode()方法得到键码外,还可用getKeyChar()方法得到输入的字符,用getKeyText(code)方法得到输入的字符串。用isShiftDown()判断shift键是否被按下等。当按下Control键时getKeyText返回的是“ctrl",Alt和Shift也类似。下面的例子演示得到键码和字符的方法,在命令行上显示结果。

    例15 本例程演示键盘监听器后键码的用法。

    ///// KeyEvt.java import java.awt.*; import java.awt.event.*; import javax.swing.*;

    class MyKeyListener implements KeyListener{   public void keyPressed(KeyEvent evt) {     System.out.println("/n按键被按下");     showKeyEventMsg(evt);   }   public void keyReleased(KeyEvent evt){ }   public void keyTyped(KeyEvent evt) { }   private void showKeyEventMsg(KeyEvent evt){//显示按键事件信息     //得到按键对应的整型数    int code = evt.getKeyCode();     //返回按键事件所代表的字符     char c = evt.getKeyChar();     //得到代表按键的字符串     String szText = evt.getKeyText(code);     if (code != KeyEvent.VK_UNDEFINED)         System.out.println("/n按键对应的整型数:"+code);     if (c != KeyEvent.CHAR_UNDEFINED)         System.out.println("/n与按键相联系的字符:"+c);     if (evt.isShiftDown())         System.out.println("/n按键Shift被按下");     System.out.println("/n按键本身的字符串:"+szText);   } } class ButtonPanel extends JPanel{     public ButtonPanel() {     //新建一个文本域组件    tf = new JTextField(20);     add(tf);     //指定用来处理该按钮事件的监听器对象为JPanel本身    myListener = new MyKeyListener();     tf.addKeyListener(myListener);   }     private JTextField tf;     private MyKeyListener myListener;   } class ButtonFrame extends JFrame{   public ButtonFrame() {     setTitle("键盘事件示例程序");     setSize(300, 200);     setLocation(100,100);     addWindowListener(new WindowAdapter() {   public void windowClosing(WindowEvent e)     { System.exit(0);   }   });     Container ctPane = getContentPane();     ctPane.add(new ButtonPanel());  } } public class KeyEvt{   public static void main(String[] args) {     JFrame frame = new ButtonFrame();     frame.setVisible(true);   } }/// 

    简要说明 

    程序建立了自己的键盘监听器MyKeyListener,定义了一个新方法showKeyEventMsg用来在标准输出设备上显示有关的键盘信息。 

    在面版ButtonPanel上建立文本框并加键盘监听器。把面版ButtonPanel放到窗口ButtonFrame中。 

    鼠标监听器

    鼠标监听器mouseListener监听鼠标事件MouseEvent。相应事件和处理方法如下表:

    鼠标事件         处理方法MOUSE_CLICKED    MouseClicked (MouseEvent)    鼠标点击(单或双)MOUSE_PRESSED    MousePressed (MouseEvent)    鼠标按下MOUSE_RELEASED   MouseReleased(MouseEvent)    鼠标松开MOUSE_ENTERED    MouseEntered (MouseEvent)    鼠标进入(某组件区域)MOUSE_EXITED     MouseExited  (MouseEvent)    鼠标离开(某组件区域)

    鼠标事件MouseEvent常用方法int getClickCount()      得到点击次数1 OR 2;int getX(), int getY()   得到鼠标的(象素)位置。

    对于鼠标的移动和拖放,另外用鼠标运动监听器mouseMotionListener。

    因为许多程序不需要监听鼠标运动,把两者分开可简化程序。有两个方法处理鼠标运动事件:

    MOUSE_MOVED      MouseMoved  (MouseEvent)    鼠标在移动MOUSE_DRAGGED    MouseDragged(MouseEvent)    鼠标被拖动

    下面的例程演示简单的鼠标监听,并在屏幕上输出鼠标操作的信息。

    例16 本例程演示鼠标监听器,鼠标点击和运动的监听。

    ///// MouseEvt.java import java.awt.*;import java.awt.event.*;import javax.swing.*; 

    class MyPanel extends JPanel implements MouseMotionListener{  public MyPanel() {    addMouseListener(new MouseAdapter() {      public void mouseClicked(MouseEvent evt) {        if (evt.getClickCount() >= 2)            System.out.println("/n双击鼠标");        int x = evt.getX(); int y = evt.getY();        System.out.println("点击鼠标的位置/nX:" + x + "/ty: " + y);        }    });    addMouseMotionListener(this);  }  public void mouseMoved(MouseEvent evt){    System.out.println("/n鼠标正在移动");  }  public void mouseDragged(MouseEvent evt){    System.out.println("/n鼠标正在拖动");  }}class MyFrame extends JFrame{  public MyFrame(){    setTitle("鼠标事件示例程序");    setSize(300, 200);    addWindowListener(new WindowAdapter(){  public void windowClosing(WindowEvent e){    System.exit(0);    }  } );    Container contentPane = getContentPane();    contentPane.add(new MyPanel());  }}public class MouseEvt{    public static void main(String[] args){        JFrame frame = new MyFrame();        frame.setVisible(true);  }}/// 

    简要说明 

    MyPanel的构建器中添加了鼠标适配器来监听鼠标点击数和位置。也添加了运动监听器来处理移动和拖放操作。


    最新回复(0)