键盘监听器和鼠标监听器

键盘监听器

键盘监听器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的构建器中添加了鼠标适配器来监听鼠标点击数和位置。也添加了运动监听器来处理移动和拖放操作。  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值