java鼠标键盘事件及实例

java鼠标键盘事件及实例


2024年6月18日发(作者:)

鼠标监听器

鼠标监听器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) 鼠标被拖动

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

例2

下面是讨论MouseMotionListener的使用时机,它提供的下面的两个方法,可让

你随时掌握鼠标的坐标,并处理拖曳鼠标的操作。

MouseMotionListener mouseDragged(MouseEvent e)

mouseMoved(MouseEvent e)

---------------------------------------------------------------------

--

下面的范例让你知道鼠标在JFrame上的坐标,并拖曳出直线来。

import .*;

import .*;

import .*;

/*为了达到画线的功能,我们分别implements MouseListener与

MouseMotionListener.

*/

public class MouseDemo3 extends JFrame implements

MouseListener,MouseMotionListener{

int flag;//flag=1代表Mouse Moved,flag=2代表Mouse Dragged

int x=0;

int y=0;

int startx,starty,endx,endy;//起始坐标与终点坐标

public MouseDemo3(){

Container contentPane=getContentPane();

seListener(this);

seMotionListener(this);

setSize(300,300);

show();

addWindowListener(

new WindowAdapter(){

public void windowClosing(WindowEvent e){

(0);

}

}

);

}

/*由mousePressed(),mouseReleased()取得示拖曳的开始与结束坐标*/

public void mousePressed(MouseEvent e){

startx=();

starty=();

}

public void mouseReleased(MouseEvent e){

endx=();

endy=();

}

public void mouseEntered(MouseEvent e){ }

public void mouseExited(MouseEvent e){ }

public void mouseClicked(MouseEvent e){ }

/*mouseMoved(),mouseDragged()取得鼠标移动的每一个坐标,并调用repaint()

方法*/

public void mouseMoved(MouseEvent e){

flag=1;

x=();

y=();

repaint();

}

public void mouseDragged(MouseEvent e){

flag=2;

x=();

y=();

repaint();

}

public void update(Graphics g){

or(kground());

ct(0,0,getWidth(),getHeight());

paint(g);

}

public void paint(Graphics g){

or();

if (flag==1){

ring("鼠标坐标:("+x+","+y+";)",10,50);

ne(startx,starty,endx,endy);

}

if (flag==2){

ring("拖曳鼠标价坐标:("+x+","+y+";)",10,50);

ne(startx,starty,x,y);

}

}

public static void main(String[] args){

new MouseDemo3();

}

}

例3

实现一个简单的鼠标控制程序MouseController。程序功能很简单:随机移动鼠

标并点击左键。

代码如下:

import eption;

import ion;

import ;

import t;

import vent;

import ;

/**

*

*/

/**

* @Create date 2007-11-6

*/

public class MouseController implements Runnable {

private Dimension dim;

private Random rand;

private Robot robot;

private volatile boolean stop = false;

public MouseController() {

dim = aultToolkit().getScreenSize();

rand = new Random();

try {

robot = new Robot();

} catch (AWTException ex) {

tackTrace();

}

}

public void run() {

while(!stop) {

int x = t();

int y = t();

ove(x, y);

ress(1_MASK);

try {

(2000);

} catch (InterruptedException ex) {

tackTrace();

}

}

}

public synchronized void stop() {

stop = true;

}

public static void main(String[] args) {

MouseController mc = new MouseController();

Thre

$False$

ad mcThread = new Thread(mc);

n("Mouse Controller start");

();

try {

(60000);

} catch (InterruptedException ex) {

tackTrace();

}

();

n("Mouse Controller stoped");

}

}

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

///

//

import .*;

import .*;

import .*;

class MyPanel extends JPanel implements MouseMotionListener{

public MyPanel() {

addMouseListener(new MouseAdapter() {

public void mouseClicked(MouseEvent evt) {

if (ckCount() >= 2)

n("n双击鼠标");

int x = (); int y = ();

n("点击鼠标的位置nX:" + x + "ty: " +

y);

}

});

addMouseMotionListener(this);

}

public void mouseMoved(MouseEvent evt){

n("n鼠标正在移动");

}

public void mouseDragged(MouseEvent evt){

n("n鼠标正在拖动");

}

}

class MyFrame extends JFrame{

public MyFrame(){

setTitle("鼠标事件示例程序");

setSize(300, 200);

addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

(0);

}

} );

Container contentPane = getContentPane();

(new MyPanel());

}

}

public class MouseEvt{

public static void main(String[] args){

JFrame frame = new MyFrame();

ible(true);

}

}

///

简要说明

在MyPanel的构建器中添加了鼠标适配器来监听鼠标点击数和位置。也添加了运

动监听器来处理移动和拖放操作。

鼠标双击事件

鼠标的单双击事件在很多时候对我们帮助很大,但是在JAVA中却没有给出鼠标双击事件.我

们可以通过事件源ckCount()==2来判断鼠标点击次数来实现鼠标双击事件,例如:

public class MyMouseListener

extends dapter ...{

public void mouseClicked(MouseEvent e) ...{

n("clicked");

int clickTimes = ckCount();

if (clickTimes == 2) ...{

n("Doublc Clicked!");

}

}

}

但是这样并没有达到我们的要求,因为在每次触发双击事件的同时会触发单击事件.所

以我们试图改进以上方案,不使用系统提供的ckCount()方法.可以考虑当第一次单击

鼠标的时候让鼠标单击事件延时0.2秒执行,而在这段时间里等待第二次单击,如果有第二次

单击,那么我们执行双击事件任务,取消单击任务;如果在这段时间没有等到再次单击,那么执

行单击任务.

下面是用定时器延时单击事件实现鼠标双击事件,单击和双击事件互不影响!

public class MyMouseListener

extends dapter ...{

private static boolean flag=false;//用来判断是否已经执行双击事件

private static int clickNum=0;//用来判断是否该执行双击事件

public void mouseClicked(MouseEvent e) ...{

final MouseEvent me=e;//事件源

=false;//每次点击鼠标初始化双击事件执行标志为false

if (um == 1) ...{//当clickNum==1时执行双击事件

oubleClicked(me);//执行双击事件

um=0;//初始化双击事件执行标志为0

=true;//双击事件已执行,事件标志为true

return;

}

//定义定时器

timer=new ();

//定时器开始执行,延时0.2秒后确定是否执行单击事件

le(new ask() ...{

private int n=0;//记录定时器执行次数

public void run() ...{

if()...{//如果双击事件已经执行,那么直接取消单击执行

n=0;

um=0;

();

return;

}

if (n == 1) ...{//定时器等待0.2秒后,双击事件仍未发生,执行单击事件

mouseSingleClicked(me);//执行单击事件

= true;

um=0;

n=0;

();

return;

}

clickNum++;

n++;

}

},new (),500);

}

/** *//**

* 鼠标单击事件

* @param e 事件源参数

*/

public void mouseSingleClicked(MouseEvent e)...{

n("Single Clicked!");

}

/** *//**

* 鼠标双击事件

* @param e 事件源参数

*/

public void mouseDoubleClicked(MouseEvent e)...{

n("Doublc Clicked!");

}

}

//

import .*;

import .*;

import .*;

public class Test extends JFrame{

public Test(){

super("test");

init();

e(800,600);

ible(true);

}

private void init(){

JButton b=new JButton("button");

nds(50,50,100,30);

tentPane().setLayout(null);

tentPane().add(b);

seListener(new MyMouseListener());

}

public static void main(String args[]){

new Test();

}

}

键盘监听器

键盘监听器KeyListener用来监听键盘事件。键盘事件有三种:KEY_PRESSED键

按下了,KEY_RELEASED键松开了,KEY_TYPED键按过了。每个键都有一个键码,

普通键的键码就是ASCII码。键码可通过int getKeyCode()方法获得。Java设

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

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

键码

VK_KP_UP

VK_PAUSE

VK_NUMBER0

VK_0

含义

小键盘向上

暂停键

小键盘数字0

数字键0

键码

VK_CONTROL

VK_ATL

VK_SHIFT

VK_F1

VK_B

含义

Ctrl键

Alt键

Shift键

功能键F1

字母键B

VK_LEFT/VK_RIGHT 左右方向键

虚拟键码对应的是键位,不区分大小写。要想知道大小写还必须查看修饰键

(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

也类似。

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

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

///

//

import .*;

import .*;

import .*;

class MyKeyListener implements KeyListener{

public void keyPressed(KeyEvent evt) {

n("n按键被按下");

showKeyEventMsg(evt);

}

public void keyReleased(KeyEvent evt){ }

public void keyTyped(KeyEvent evt) { }

private void showKeyEventMsg(KeyEvent evt){//显示按键事件信息

//得到按键对应的整型数

int code = Code();

//返回按键事件所代表的字符

char c = Char();

//得到代表按键的字符串

String szText = Text(code);

if (code != _UNDEFINED)

n("n按键对应的整型数:"+code);

if (c != _UNDEFINED)

n("n与按键相联系的字符:"+c);

if (tDown())

n("n按键Shift被按下");

n("n按键本身的字符串:"+szText);

}

}

class ButtonPanel extends JPanel{

public ButtonPanel() {

//新建一个文本域组件

tf = new JTextField(20);

add(tf);

//指定用来处理该按钮事件的监听器对象为JPanel本身

myListener = new MyKeyListener();

Listener(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)

{ (0);

}

});

Container ctPane = getContentPane();

(new ButtonPanel());

}

}

public class KeyEvt{

public static void main(String[] args) {

JFrame frame = new ButtonFrame();

ible(true);

}

}

///简要说明

1. 程序建立了自己的键盘监听器MyKeyListener,定义了一个新方法

showKeyEventMsg用来在标准输出设备上显示有关的键盘信息。

2. 在面版ButtonPanel上建立文本框并加键盘监听器。把面版ButtonPanel

放到窗口ButtonFrame中。


发布者:admin,转转请注明出处:http://www.yc00.com/web/1718695285a2751899.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信