当前位置:文档之家› 键盘监听器与鼠标监听器

键盘监听器与鼠标监听器

键盘监听器键盘监听器KeyListener用来监听键盘事件。

键盘事件有三种:KEY_PRESSED键按下了,KE Y_RELEASED键松开了,KEY_TYPED键按过了。

每个键都有一个键码,普通键的键码就是ASC II码。

键码可通过int getKeyCode()方法获得。

Java设置了一种“虚拟键码”(Virtual K ey Code),用“VK_”作为前缀,例如VK_G。

下面是某些特殊键的虚拟键码。

VK_LEFT/VK_RIGHT 左右方向键VK_CONTROL Ctrl键VK_KP_UP 小键盘向上VK_ATL Alt键VK_PAUSE 暂停键VK_SHIFT Shift键VK_NUMBER0 小键盘数字0 VK_F1 功能键F1VK_0 数字键0 VK_B 字母键B虚拟键码对应的是键位,不区分大小写。

要想知道大小写还必须查看修饰键(modifier key)。

这由输入事件InputEvent的getModifere()方法得到,把返回值与常量SHIFT_MASK, CONT ROL_MASK, ALT_MASK比较,用以判定哪个修饰键处于“同时按下”状态。

监听器KeyListener有三个方法keyPressed(KeyEvent evt),keyReleased(KeyEvent evt), keyTyped(KeyEvent evt),分别用于相应事件发生后的处理。

下面的例程中给自己的键盘监听器建立了showKeyEventMsg方法来显示按键信息。

除了getKeyCode()方法得到键码外,还可用getKeyChar()方法得到输入的字符,用getKey Text(code)方法得到输入的字符串。

用isShiftDown()判断shift键是否被按下等。

当按下Control键时getKeyText返回的是“ctrl",Alt和Shift也类似。

下面的例子演示得到键码和字符的方法,在命令行上显示结果。

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

///// KeyEvt.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;class MyKeyListener implements KeyListener{publicvoid keyPressed(KeyEvent evt) {System.out.println("\n按键被按下");showKeyEventMsg(evt);}publicvoid keyReleased(KeyEvent evt){ }publicvoid keyTyped(KeyEvent evt) { }privatevoid 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() {publicvoid windowClosing(WindowEvent e){ System.exit(0);}});Container ctPane = getContentPane();ctPane.add(new ButtonPanel());}}publicclass KeyEvt{publicstaticvoid 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() 得到鼠标的(象素)位置。

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

因为许多程序不需要监听鼠标运动,把两者分开可简化程序。

有两个方法处理鼠标运动事件:MOUSE_MOVED MouseMoved (MouseEvent) 鼠标在移动MOUSE_DRAGGED MouseDragged(MouseEvent) 鼠标被拖动下面的例程演示简单的鼠标监听,并在屏幕上输出鼠标操作的信息。

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

///// MouseEvt.javaimport 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的构建器中添加了鼠标适配器来监听鼠标点击数和位置。

也添加了运动监听器来处理移动和拖放操作。

相关主题