键盘监听器和鼠标监听器

键盘监听器

键盘监听器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功能键F1
VK_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);
  }
}
///

简要说明

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

  2. 在面版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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值