键盘监听器和鼠标监听器

键盘监听器和鼠标监听器 

键盘监听器

键盘监听器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、付费专栏及课程。

余额充值