Java监听键盘鼠标全局事件

合集下载

事件处理4

事件处理4

基本概念
事件源(event source):产生事件的对象。如在 一个按钮上单击鼠标时,该按钮是事件源,会产 生一个ActionEvent类型的事件。
事件监听者(Listener):Java程序把事件进行处理 的方法放在一个类对象中,这个类对象就是事件 监听者。事件源通过调用相应的方法将某个对象 设置为自己的监听者,监听者有专门的方法来处 理事件。
常用方法:
public String getActionCommand()返回与此动作相关的命 令字符串。
public long getWhen()返回发生此事件时的时间戳。 public int getModifiers()返回发生此动作事件期间按下的组
合键。 public Object getSource() 最初发生 Event 的对象。
} public static void main(String[] args){ GUIDemo8 d=new GUIDemo8(); }
}
选项事件类 ItemEvent
当用户在窗口中的带有可选择功能的组件中进行 选取操作时所发生的事件.
选项事件ItemEvent的监听者是ItemListener. 该接口中提供的事件处理方法只有一个 itemStateChanged(ItemEvent e),当组件中 的选项状态改变时,将调用该方法.
public GUIDemo8() { jta=new JTextArea(); jp1=new JPanel(); String[] chatters={"红红","白白","蓝蓝"}; jcb=new JComboBox(chatters); jtf=new JTextField(10); jb=new JButton("发送"); jsp=new JScrollPane(jta);

jnativehook 用法

jnativehook 用法

jnativehook 是一个 Java 库,它提供全局的键盘和鼠标事件侦听功能。

以下是使用 jnativehook 的基本步骤:1. 下载和安装 jnativehook:首先,你需要从 jnativehook 的官方网站下载相关的库文件,并将其添加到你的 Java 项目的类路径中。

2. 创建一个监听器:在 Java 项目中创建一个监听器类,该类将实现 jnativehook 的接口来处理各种事件。

你可以创建一个名为 MyKeyListener 的类,并让它实现 NativeKeyListener 接口。

以下是一个简单的示例:java复制代码import org.jnativehook.GlobalScreen;import org.jnativehook.NativeHookException;import org.jnativehook.keyboard.NativeKeyEvent;import org.jnativehook.keyboard.NativeKeyListener;public class MyKeyListener implements NativeKeyListener {public void nativeKeyPressed(NativeKeyEvent e) {System.out.println("Key Pressed: " +NativeKeyEvent.getKeyText(e.getKeyCode()));}public void nativeKeyReleased(NativeKeyEvent e) {System.out.println("Key Released: " +NativeKeyEvent.getKeyText(e.getKeyCode()));}public void nativeKeyTyped(NativeKeyEvent e) {System.out.println("Key Typed: " + e.getKeyText(e.getKeyCode()));}public static void main(String[] args) {try {GlobalScreen.registerNativeHook();} catch (NativeHookException ex) {System.err.println("There was a problem registering the native hook.");System.err.println(ex.getMessage());System.exit(1);}GlobalScreen.addNativeKeyListener(new MyKeyListener());}}在这个示例中,我们创建了一个名为 MyKeyListener 的类,并实现了 NativeKeyListener 接口。

JAVA 如何截获全局鼠标事件

JAVA  如何截获全局鼠标事件
以上是13种常用的hook类型!
二. 按使用范围分类,主要有线程钩子和系统钩子
(1) 线程钩子监视指定线程的事件消息。
(2) 系统钩子监视系统中的所有线程的事件消息。因为系统钩子会影响系统中所有的应用程序,所以钩子函数必须放在独立的动态链接库(DLL)
中。这是系统钩子和线程钩子很大的不同之处。
几点需要说明的地方:
(1) 如果对于同一事件(如鼠标消息)既安装了线程钩子又安装了系统钩子,那么系统会自动先调用线程钩子,然后调用系统钩子。
(2)对同一事件消息可安装多个钩子处理过程,这些钩子处理过程形成了钩子链。当前钩子处理结束后应把钩子信息传递给下一个钩子函数。而且最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。
(3) 钩子特别是系统钩子会消耗消息处理时间,降低系统性能。只有在必要的时候才安装钩子,在使用完毕后要及时卸载。
JAVA 如何截获全局鼠标事件
Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的。而钩子是Windows系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能。钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,屏幕取词,日志监视等等。可见,利用钩子可以实现许多特殊而有用的功能。因此,对于高级编程人员来说,掌握钩子的编程方法是很有必要的。
1. 激活,建立,销毁,最小化,最大化,移动,改变尺寸等窗口事件;
2. 完成系统指令;
3. 来自系统消息队列中的移动鼠标,键盘事件;

Java实现Hook对鼠标键盘监听-沐早SNOTEBOOK-CSDN博客

Java实现Hook对鼠标键盘监听-沐早SNOTEBOOK-CSDN博客

Java实现Hook对鼠标键盘监听-沐早SNOTEBOOK-CSDN博客Java 实现 Hook 对鼠标键盘监听收藏Java 实现全局(全操作系统)的鼠标和键盘监控,使用的是SWT Win32 Extension 项目,在以前若使用Java恐怕是很难实现的!SWT Win32 Extension 让Java拥有了许多对操作系统底层操作的功能!注:本程序需要SWT Win32 Extension支持?以下两个例子是:(一)鼠标Hookview plaincopy to clipboardprint?1.import org.sf.feeling.swt.win32.extension.hook.Hook;2.import org.sf.feeling.swt.win32.extension.hook.data.Hook Data;3.import org.sf.feeling.swt.win32.extension.hook.data.Mous eHookData;4.import org.sf.feeling.swt.win32.extension.hook.listener.Ho okEventListener;5.6.public class HotMouse {7.8.public static void main(String[] args) {9.Hook.MOUSE.addListener(new HookEventListener() {10.public void acceptHookData(HookData hookData) {11.if (hookData != null) {12.//System.out.println("Mouse Point X = " + ((MouseHo okData)hookData).getPointX());13.//System.err.println("Mouse Point Y =" + ((MouseHookData)hookData).getPointY());14.System.err.println(((MouseHookData)hookData).getPoi ntX()+"," + ((MouseHookData)hookData).getPointY());15.}16.if (hookData.getWParam() == 513) { System.out.p rintln("left button pressed");// left button pressed17.} else if (hookData.getWParam() == 514) { System.out .println("left button released");// left button released18.} else if (hookData.getWParam() == 516) { System.out .println("right button pressed");// right button pressed19.} else if (hookData.getWParam() == 517) { System.out .println("right button");// right button20.} else if (hookData.getWParam() == 519) { System.out .println("middle button 519");// middle button21.} else if (hookData.getWParam() == 520) { System.out .println("middle button 520");// middle button22.}23.}24.});25.Hook.MOUSE.install();26.}27.28.}(二)键盘Hookview plaincopy to clipboardprint?1.import org.sf.feeling.swt.win32.extension.hook.Hook;2.import org.sf.feeling.swt.win32.extension.hook.data.HookData;3.import org.sf.feeling.swt.win32.extension.hook.data.Keyb oardHookData;4.import org.sf.feeling.swt.win32.extension.hook.listener.Ho okEventListener;5.6.public class HotKey {7.public static void main(final String[] args) {8.Hook.KEYBOARD.addListener(new HookEventListener(){// @Override9.public void acceptHookData(HookData arg0) {10.KeyboardHookData KHD = ((KeyboardHookData)arg0) ;11.System.out.println(KHD.getWParam()+" - "+KHD.getTr ansitionState()); //Print code12.if( KHD.getScanCode() == 29 && KHD.getTransitionSt ate()){ //按下Ctrl執行動作13.System.out.println("Hotting");14.}else if( KHD.getScanCode() == 1 ){ //按下[ESC]結束15.System.exit(0);16.}17.}});18.Hook.KEYBOARD.install(); //註冊事件19.}20.}以上两个例子源于:这里要感谢!感谢!。

java中textfield中清空内容的方法

java中textfield中清空内容的方法

一、介绍Java中TextField控件在Java编程中,TextField是一个常用的用户界面控件,用于接收用户输入的文本数据。

它通常用于表单、登录页面、搜索框等场景中,是与用户进行交互的重要组成部分。

二、TextField中清空内容的方法在实际的开发中,经常会遇到需要清空TextField中内容的情况,下面将介绍几种常用的方法。

1. 使用setText方法通过调用TextField的setText方法,可以将其内容设置为空字符串,从而实现清空的效果。

示例代码如下:```javatextField.setText("");```这样就可以清空textField中的内容。

2. 监听键盘事件另一种常见的做法是通过监听键盘事件,在用户按下特定键(如Delete键)时清空TextField中的内容。

示例代码如下:```javatextField.addKeyListener(new KeyAdapter() {Overridepublic void keyPressed(KeyEvent e) {if (e.getKeyCode() == KeyEvent.VK_DELETE) {textField.setText("");}}});```这样,当用户按下Delete键时,TextField中的内容就会被清空。

3. 使用DocumentListener还可以通过监听Document的变化,在用户输入内容后立即清空TextField中的内容。

示例代码如下:```javatextField.getDocument().addDocumentListener(new DocumentListener() {Overridepublic void removeUpdate(DocumentEvent e) {textField.setText("");}Overridepublic void insertUpdate(DocumentEvent e) {textField.setText("");}Overridepublic void changedUpdate(DocumentEvent e) {textField.setText("");}});```这样,无论用户是删除已有内容还是输入新内容,TextField中的内容都会被立即清空。

JAVA事件处理机制

JAVA事件处理机制

JAVA事件处理机制JAVA事件处理机制是指在JAVA编程中对事件进行监听和响应的一种机制。

在JAVA中,事件是指用户在程序运行过程中进行的各种操作,如鼠标点击、键盘输入、窗口关闭等。

通过事件处理机制,程序可以在特定事件发生时触发相应的操作,从而实现与用户的交互。

在JAVA中,事件处理机制主要涉及到以下几个方面:事件源、事件监听器、事件对象和事件处理器。

事件源是指能够触发事件的对象,例如按钮、文本框等;事件监听器是指用来监听事件的对象,它实现了相应的事件监听接口;事件对象是指封装了事件源和事件信息的对象,它包含了发生事件的相关属性;事件处理器是指在事件被触发时需要执行的操作,可以通过事件监听器来定义。

事件处理机制通常包括以下几个步骤:1.创建事件源对象:例如创建一个按钮对象。

2.创建事件监听器对象:实现相应的事件监听接口,并重写事件处理方法。

3.将事件监听器对象注册到事件源对象中:通过调用事件源对象的方法将事件监听器对象注册到事件源对象中,使其能够监听事件源对象的事件。

4.触发事件:用户进行相应操作后,事件源对象会触发相应的事件。

5.事件源对象通知事件监听器对象:事件源对象会调用事件监听器对象的相应方法,将事件对象作为参数传递给事件监听器对象。

6.事件监听器对象执行操作:事件监听器对象接收到事件对象后,根据事件对象中的信息执行相应的操作。

通过事件处理机制,可以实现丰富的用户交互功能。

例如,在一个图形界面程序中,用户点击按钮时,可以触发按钮的点击事件,然后执行相应的操作,如弹出对话框、刷新界面等。

又如,用户在文本框中输入内容时,可以触发文本框的输入事件,然后进行相应的校验、处理等操作。

JAVA提供了丰富的事件监听接口和类库,使得事件处理变得更加方便。

例如,对于鼠标事件,可以使用MouseListener接口和MouseAdapter适配器类来实现对鼠标事件的监听和处理。

对于键盘事件,可以使用KeyListener接口和KeyAdapter适配器类来实现对键盘事件的监听和处理。

java listener几个功能例子

java listener几个功能例子

java listener几个功能例子Java中的Listener通常用于监听和处理事件。

下面是一些Java Listener的示例:1. ActionListener:用于监听和处理按钮点击事件。

```javaimport ;import ;import ;import ;public class ButtonExample {public static void main(String[] args) {JFrame frame = new JFrame("Button Example");JButton button = new JButton("Click me!");(new ActionListener() {public void actionPerformed(ActionEvent e) {("Button clicked!");}});().add(button);(300, 200);(_ON_CLOSE);(true);}}```2. MouseListener:用于监听和处理鼠标事件。

```javaimport ;import ;import ;import ;public class MouseExample {public static void main(String[] args) {JFrame frame = new JFrame("Mouse Example");JPanel panel = new JPanel();(new MouseListener() {public void mouseClicked(MouseEvent e) { ("Mouse clicked!");}public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} });().add(panel);(300, 200);(_ON_CLOSE);(true);}}```3. KeyListener:用于监听和处理键盘事件。

java listener原理

java listener原理

java listener原理Java中的Listener是指监听器,它可以用来监听各种事件,例如鼠标点击、键盘输入、窗口关闭等。

Listener应用广泛,几乎可以植入在Java应用程序的任何部分。

在本文中,我们将深入探讨Java Listener的原理,以帮助我们更好地理解和应用它。

1. Listener的概念和种类Listener是一种Java编程语言中的一类对象,它用于监听和响应特定类型的事件。

Java中包含多种Listener,例如鼠标监听器(MouseEvent)、键盘监听器(KeyListener)、窗口监听器(WindowListener)等。

每种Listener都有其特定的方法和事件,可以在需要的时候进行注册和使用。

2. Listener的工作原理Listener的工作原理可以用以下几个步骤来说明:- 创建Listener对象:首先需要创建一个Listener对象,该对象需要实现Listener接口,同时需要重写该接口定义的相应方法。

- 注册Listener对象:注册Listener对象是将Listener对象与要监听的事件进行关联,这是Listener对象可以侦听到关联事件的关键。

- 等待事件发生:Listener对象需要等待指定类型的事件发生,然后触发相应的方法来处理事件。

- 响应事件:Listener对象需要响应已经接收到的事件,例如在鼠标单击事件中,可以在相应的方法中添加单击处理代码。

3. Listener的应用Listener可以应用于很多场景,例如:- 检测用户输入:通过监听键盘监听器,可以检测用户输入特定的按键,例如删除、回车等,从而响应用户输入事件。

- 监听鼠标移动:通过监听鼠标监听器,可以检测鼠标移动的轨迹,从而实现游戏中的怪物跟随鼠标移动的效果。

- 控制窗口关闭:通过监听窗口监听器,可以实现窗口关闭时执行特定的代码,例如保存打开的文件等。

- 实时更新数据:通过监听数据源,可以实现数据的实时更新,例如数据库数据更新时可以通知监听器进行及时更新。

java listener几个功能例子 -回复

java listener几个功能例子 -回复

java listener几个功能例子-回复Java Listener 几个功能例子Java是一种功能强大的编程语言,旨在为开发人员提供灵活且可靠的解决方案。

其中一个重要的特性是监听器(Listener),它允许程序在特定事件发生时做出相应的反应。

本文将介绍几个常见的Java Listener功能例子,并逐步演示其实现过程。

写这篇文章时,将依次介绍以下功能例子:1. 窗口监听器(WindowListener): 当用户打开、关闭或最小化窗口时触发的事件。

2. 鼠标监听器(MouseListener): 当用户在GUI界面上进行鼠标点击操作时触发的事件。

3. 键盘监听器(KeyListener): 当用户在GUI界面上按下键盘按键时触发的事件。

下面将逐一介绍这些功能例子,并提供详细的实现步骤。

1. 窗口监听器(WindowListener)窗口监听器允许我们在窗口打开、关闭或最小化等事件发生时做出相应的反应。

要实现窗口监听器,我们可以创建一个实现WindowListener接口的类,并重写其方法。

首先,我们需要创建一个GUI窗口,可以使用Swing或JavaFX框架。

接下来,创建一个窗口监听器的实现类。

这个类应该继承WindowAdapter,它提供了对WindowListener接口的默认实现。

在窗口监听器实现类中,我们可以重写以下方法来响应窗口事件:- windowOpened(WindowEvent e):窗口打开时触发的事件。

- windowClosing(WindowEvent e):用户关闭窗口时触发的事件。

- windowIconified(WindowEvent e):窗口最小化时触发的事件。

以窗口关闭事件为例,可以按照以下步骤实现:1. 创建窗口监听器实现类,并重写windowClosing方法。

2. 在windowClosing方法中添加关闭窗口的逻辑,例如释放资源或保存数据。

简述监听器的使用流程

简述监听器的使用流程

简述监听器的使用流程1. 什么是监听器监听器(Listener)是一种常用的编程技术,用于监听并响应特定事件的发生。

在编程中,我们经常需要对某些事件进行处理,例如用户点击按钮、网页加载完成、数据改变等等,这时候就可以通过监听器来捕获并处理这些事件。

2. 监听器的分类在Java语言中,监听器主要分为两类:事件监听器和属性监听器。

2.1 事件监听器事件监听器用于监听特定的事件,并在事件发生时执行相应的操作。

在Java中,我们可以通过为组件添加事件监听器来实现对按钮点击、键盘输入、鼠标移动等事件的监听。

常见的事件监听器包括:•ActionListener:监听按钮点击事件•MouseListener:监听鼠标点击、鼠标移动等事件•KeyListener:监听键盘按下、键盘释放等事件2.2 属性监听器属性监听器用于监听对象的属性变化,并在属性发生改变时执行相应的操作。

属性监听器通常与JavaBean一起使用,可以实现对JavaBean属性的监控和响应。

3. 使用流程监听器的使用流程主要包括以下几个步骤:3.1 确定需要监听的事件或属性首先,我们需要确定需要监听的事件或属性。

例如,如果我们想监听一个按钮的点击事件,就需要使用ActionListener监听器。

3.2 创建监听器对象创建一个监听器对象,可以是内部类的实例,也可以是外部类的实例。

监听器对象负责实现监听器接口,并重写相应的事件处理方法。

3.3 将监听器添加到组件将监听器对象添加到需要监听的组件中。

例如,如果我们想监听一个按钮的点击事件,就需要使用addXXXListener()方法将监听器对象添加到按钮中。

3.4 实现事件处理方法在监听器对象中实现相应的事件处理方法。

不同的监听器接口有不同的事件处理方法,我们需要根据需要重写相应的方法并编写相应的处理逻辑。

3.5 注册监听器将监听器注册到组件中,使其开始监听特定的事件或属性。

注册方法通常以addXXXListener()的形式存在。

java事件处理机制

java事件处理机制

2
事件处理机制
事件及其处理机制
如果用户在用户界面执行了一个动作,这将导致一个事件的发生。 事件是描述用户所执行的一个操作,所产生的一个行为。 三个主要概念:事件、事件源、事件处理方法
事件的接口及方法
事件监听器(或谓监视器或处理者)通常是一个类,每一个事件类都有一个对应的事件处理 接口。例如,处理键盘输入事件“KeyEvent”类的接口为“KeyListener” 接口,监听器是 接口,又称监听器接口。
当使用CTRL+C复合键时,下面的逻辑表达式为true :
e.getModifiers()==InputEvent.CTRL_MASK&&e.getKeyCode()==KeyEvent. VK_C 【例8-11】键盘事件的创建与响应实例。
1.3 文本事件
文本框TextField或文本域TextArea信息发生改变时,产生TextEvent文本事 件。要使程序能响应并处理TextEvent事件,要实现TextListener接口,应将 TextEvent事件注册给监听器:public void addTextListener(Listener),并实 现TextListener接口中的textValueChanged(TextEvent)方法。 【例8-13】文本事件程序设计实例。
2021/12/17
图形用户界面编程
3
2021/12/17
图形用户界面编程
4
事件Байду номын сангаас理机制
3. 事件处理主要步骤
通常,处理的主要步骤如下(设表8-11所示某事件为XxxEvent): 选择组件作为事件源,不同类型的组件会产生特定类型的事件。 定义要接收并处理某种类型的事件XxxEvent,注册相应的事件监听器类。 通过调用组件方法:eventSourceObject.addXxxListener(XxxListener)方 法向组件注册事件监听器。

java键盘监听事件的用法

java键盘监听事件的用法

java键盘监听事件的用法Java中,键盘监听事件用于捕获并处理用户在键盘上的输入。

键盘监听事件能够感知用户按下和释放特定键的动作,并触发相应的事件处理程序。

本文将逐步介绍Java键盘监听事件的用法,包括如何注册监听器、如何处理事件以及一些常见问题的解决方法。

一、注册键盘监听器要使用键盘监听事件,首先需要注册一个键盘监听器。

在Java中,可以通过以下步骤来注册键盘监听器:1. 创建一个类,实现java.awt.event.KeyListener接口。

javaimport java.awt.event.KeyEvent;import java.awt.event.KeyListener;public class MyKeyListener implements KeyListener {实现接口中的方法@Overridepublic void keyPressed(KeyEvent e) {处理按下键的事件}@Overridepublic void keyReleased(KeyEvent e) {处理释放键的事件}@Overridepublic void keyTyped(KeyEvent e) {处理键入字符的事件}}2. 在需要监听键盘事件的组件(例如窗口或面板)上注册监听器。

javaimport java.awt.*;import javax.swing.*;public class MyFrame extends JFrame {public MyFrame() {创建一个面板JPanel panel = new JPanel();注册键盘监听器panel.addKeyListener(new MyKeyListener());panel.setFocusable(true); 设置面板可以获取焦点panel.requestFocus(); 使面板获取焦点添加面板到窗口add(panel);设置窗口属性setTitle("Keyboard Event Sample");setSize(300, 200);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setVisible(true);}public static void main(String[] args) {new MyFrame();}}二、处理键盘事件注册了键盘监听器后,就可以处理键盘事件了。

Java按键事件KeyEvent

Java按键事件KeyEvent

Java按键事件KeyEvent按键事件可以利⽤键盘来控制和执⾏⼀些动作,或者从键盘上获取输⼊,只要按下,释放⼀个键或者在⼀个组件上敲击,就会触发按键事件。

KeyEvent对象描述事件的特性(按下,放开,或者敲击⼀个键)和对应的值。

java提供KeyListener接⼝处理按键事件。

当按下⼀个键时会调⽤KeyPressed处理器,当松开⼀个键时会调⽤KeyReleased处理器,当输⼊⼀个统⼀编码时会调⽤KeyTyped处理器。

如果这个键不是统⼀码(如功能键,修改键,动作键和控制键)每个按键事件有⼀个相关的按键字符和按键代码,分别由KeyEvent中的getKeyChar()和getKeyCode()⽅法返回getKeyChar(): char 返回这个事件中和键相关的字符getKeyCode(): int 返回这个事件中和键相关的整数键keyPressed(e: KeyEvent) 在源组件上按下⼀个键后被调⽤KeyReleased(e: KeyEvent) 在源组件上释放⼀个键后被调⽤KeyTyped(e: KeyEvent) 在源组件上按下⼀个键然后释放该键后被调⽤按键常量VK_HOME Home键 VK_CONTROL 控制键VK_END End键 VK_SHIFT shift键VK_PGUP page up键 VK_BACK_SPACE 退格键VK_PGDN page down键 VK_CAPS_LOCK ⼤⼩写锁定键VK_UP 上箭头 VK_NUM_LOCK ⼩键盘锁定键VK_DOWN 下箭头 VK_ENTER 回车键VK_LEFT 左箭头 VK_UNDEFINED 未知键VK_RIGHT 右箭头 VK_F1--VK_F12 F1 -- F12VK_ESCAPE Esc键 VK_0 --VK_9 0 --- 9VK_TAB Tab键 VK_A --VK_Z A----ZgetKeyCode()返回定义在表中的值getKeyChar()返回输⼊的字符1import java.awt.*;2import java.awt.event.*;3import javax.swing.*;45public class KeyEventDemo extends JFrame{6private KeyboardPanel keyboardPanel = new KeyboardPanel();78public KeyEventDemo(){9 add( keyboardPanel);1011 keyboardPanel.setFocusable(true);1213 }1415public static void main(String[] args){16 KeyEventDemo frame = new KeyEventDemo();17 frame.setTitle( "KeyEventDemo");18 frame.setSize(300,300);19 frame.setLocationRelativeTo( null);20 frame.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE);21 frame.setVisible( true);2223 }2425static class KeyboardPanel extends JPanel{26private int x = 100;27private int y = 100;28private char KeyChar = 'A' ;2930public KeyboardPanel(){31 addKeyListener( new KeyAdapter(){32public void keyPressed(KeyEvent e){33switch(e.getKeyCode()){34case KeyEvent.VK_DOWN: y += 10;break;35case KeyEvent.VK_UP: y -= 10; break;36case keyEvent.VK_LEFT: x -= 10; break;37case KeyEvent.VK_RIGHT: x += 10; break;38default: keyChar = e.getKeyChar();39 }4041 repaint();42 }43 });44 }4546protected void paintComponent(Graphics g){47super.paintComponent(g);4849 g.setFont( new Font("TimesRoman" ,Font.PLAIN,24));50 g.drawString(String. valueOf(KeyChar), x, y);51 }52 }53 }。

Java使用Robot类模拟鼠标、键盘事件

Java使用Robot类模拟鼠标、键盘事件

Java使⽤Robot类模拟⿏标、键盘事件Robot类⽤于模拟⿏标、键盘事件,⽣成本机系统输⼊事件。

Robot 的主要⽤于⾃动化、⾃运⾏的程序和其他需要⾃动控制⿏标和键盘的程序相当于实际操作的效果,不仅仅只是⽣成对应的⿏标、键盘事件。

⽐如Robot.mouseMove() 将实际移动⿏标光标,⽽不是只⽣成⿏标移动事件。

实现的是本机的全局模拟,不仅仅局限于写的程序和IDERobot类常⽤⽅法:void delay (int ms) 睡眠指定的时间(类似于线程中sleep)void keyPress(int keycode)按下指定的键void keyRelease(int keycode)释放指定的键void mousePress(int buttons)按下⼀个或多个⿏标按键void mouseRelease(int buttons)释放⼀个活多个⿏标按键void mouseMove(int x,int y)将⿏标移动到给定的屏幕坐标上void mouseWheel(int wheelAmt)滚动⿏标滑轮实例:1package my_package;23import java.awt.*;4import java.awt.event.InputEvent;5import java.awt.event.KeyEvent;678/**9 * 利⽤Robot实现⾃动清屏10*/11public class Test {12public static void main(String[] args) throws AWTException {13 System.out.println("ok");14 Robot robot = new Robot();1516//将⿏标移到控制台区域17 robot.mouseMove(300,600);1819//单击右键20 robot.mousePress(InputEvent.BUTTON3_DOWN_MASK);21 robot.mouseRelease(InputEvent.BUTTON3_DOWN_MASK);2223//按CTRL+⼩键盘的数字0,实现清屏。

Java中的鼠标事件和键盘事件

Java中的鼠标事件和键盘事件

Example18_9/10.java
键盘事件
键盘事件:
按下 释放 敲击键盘上一个键
事件源获得监视器的方法是 addKeyListener(监视器) addKeyListener(监视器) 处理事件源发生事件的接口是 KeyListener,其中方法: KeyListener,其中方法:
keyPressed(KeyEvent e) keyTyped(KeyEvent e):键被按下又释 e):键被按下又释 放时被调用 keyReleased(keyEvent e)
使用MouseListener接口处理鼠 使用MouseListener接口处理鼠 标事件
事件源获得监视器的方法是 addMouseListener(监视器) addMouseListener(监视器) 处理事件源发生事件的接口是 MouseListener,其中方法: MouseListener,其中方法:
mouseDragged(MouseEvent):负责处理鼠标拖 mouseDragged(MouseEvent):负责处理鼠标拖 动事件 MouseMoved(MouseEvent) :负责处理鼠标移动 事件
Example18_6/7.java
控制鼠标的指针形状
可使用setCursor方法,如设置成漏斗: 可使用setCursor方法,如设置成漏斗:
Example18_1/2/3/4/5.java
使用MouseMotionListener接口 使用MouseMotionListener接口 处理鼠标事件
事件源发生的鼠标事件:
拖动鼠标 鼠标移动(鼠标键不按下)
鼠标事件的类型是MouseEvent 鼠标事件的类型是MouseEvent 事件源获得监视器的方法是 addMouseMotionListener(监视器) addMouseMotionListener(监视器) 处理事件源发生事件的接口是 MouseMotionListener,其中方法: MouseMotionListener,其中方法:

Java 中的鼠标事件

Java 中的鼠标事件

18.4 键盘事件
当按下、释放或敲击键盘上一个键时就发生了键盘事件,在Javal.2事件模式 中,必须要有发生事件的事件源。当一个组件处于激活状态时,敲击键盘上 一个键就导致这个组件上发生了键盘事件。 事件源使用addKeyListener(监视器)方法获得监视器。 监视器是一个对象,创建该对象的类必须实现接口KeyListener。接口 KeyListener中有3个方法: public void keyPressed(KeyEvent e) public void keyTyped(KeyEvent e) public void KeyReleased(KeyEvent e) 当你按下键盘上某个键时,监视器就会发现,然后方法keyPressed方法会自 动执行,并且KeyEvet类自动创建一个对象传递给方法keyPressed中的参数e。 方法keyTyped是keyPressed和keyReleased方法的组合,当键被按下又释放时, keyTyped方法被调用。用KeyEvent类的public int getKeyCode()方法,可以 判断哪个键被按下、敲击或释放,getKeyCode方法返回一个键码值(如表所 示)。也可以用KeyEvent类的public char getKeyChar()判断哪个键被按下、 敲击或释放,getKeyChar方法返回键的字符。
在下面例子mouse2.java中,当在画布上按下鼠标左键时,在鼠标位置处绘制 一个圆;当按下鼠标右键时,在鼠标位置处绘制一个矩形:当鼠标退出画布 时,清除绘制的全部图形。 下面的例子mouse3.java分别监视按钮、文本框和容器上的鼠标事件,当发生 鼠标事件时,获取鼠标的坐标值,注意,事件源的坐标系的左上角是坐标源 点
18.2 使用MouseMotionListener接口处理鼠标事件

java鼠标键盘事件及实例

java鼠标键盘事件及实例

鼠标监听器鼠标监听器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上的坐标,并拖曳出直线来。

java键盘鼠标监听

java键盘鼠标监听

键盘监听器和鼠标监听器键盘监听器键盘监听器KeyListener用来监听键盘事件。

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

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

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

Java设置了一种“虚拟键码”(Virtual Key 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, CONTROL_MASK, ALT_MASK比较,用以判定哪个修饰键处于“同时按下”状态。

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

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

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

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

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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include <windows.h>#include "SysHook.h"#include <jni.h>HINSTANCEhInst = NULL;JavaVM * jvm = NULL;jobject hookObj_kb = NULL;jobject hookObj_ms = NULL;jobject g_kl = NULL;jmethodID processKeyID_kb = NULL;jmethodID processKeyID_ms = NULL;DWORDhookThreadId = 0;LONGg_mouseLocX = -1;// x-location of mouse positionLONGg_mouseLocY = -1;// y-location of mouse positionextern"C"BOOLAPIENTRY DllMain(HINSTANCE_hInst,DWORDreason,LPVOIDreserved){switch(reason){caseDLL_PROCESS_ATTACH:printf("C++: DllMain - DLL_PROCESS_ATTACH.\n");hInst = _hInst;break;default:break;}returnTRUE;}LRESULTCALLBACK MouseTracker(intnCode,WPARAMwParam,LPARAMlParam){JNIEnv * env;KBDLLHOOKSTRUCT * p = (KBDLLHOOKSTRUCT *)lParam;if(jvm->AttachCurrentThread((void**)&env, NULL) >= 0){if(nCode==HC_ACTION){MOUSEHOOKSTRUCT* pStruct = (MOUSEHOOKSTRUCT*)lParam;if(pStruct->pt.x != g_mouseLocX || pStruct->pt.y != g_mouseLocY){env->CallVoidMethod(hookObj_ms, processKeyID_ms, (jint)pStruct->pt.x,(jint)pStruct->pt.y, g_kl);g_mouseLocX = pStruct->pt.x;g_mouseLocY = pStruct->pt.y;}}}else{printf("C++: LowLevelKeyboardProc - Error on the attach current thread.\n");}returnCallNextHookEx(NULL, nCode, wParam, lParam);}LRESULTCALLBACKLowLevelKeyboardProc(intnCode,WPARAMwParam,LPARAMlParam){JNIEnv * env;KBDLLHOOKSTRUCT * p = (KBDLLHOOKSTRUCT *)lParam;if(jvm->AttachCurrentThread((void**)&env, NULL) >= 0){switch(wParam){caseWM_KEYDOWN:caseWM_SYSKEYDOWN:env->CallVoidMethod(hookObj_kb, processKeyID_kb, (jboolean)TRUE, p->vkCode,g_kl);break;caseWM_KEYUP:caseWM_SYSKEYUP:env->CallVoidMethod(hookObj_kb, processKeyID_kb, (jboolean)FALSE, p->vkCode,g_kl);break;default:break;}}else{printf("C++: LowLevelKeyboardProc - Error on the attach current thread.\n");}returnCallNextHookEx(NULL, nCode, wParam, lParam);}voidMsgLoop(){MSG message;while(GetMessage(&message, NULL, 0, 0)){TranslateMessage(&message);DispatchMessage(&message);}}JNIEXPORTvoidJNICALL Java_SysHook_registerHook(JNIEnv * env, jobject obj,jobject kl){HHOOKhookHandle_ms = SetWindowsHookEx(WH_MOUSE_LL, MouseTracker, hInst, 0);HHOOKhookHandle_kb = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hInst, 0);g_kl = kl;if(hookHandle_ms == NULL){printf("C++: Java_SysHook_registerKeyHook - Hook failed!\n"); return;}else{printf("C++: Java_SysHook_registerKeyHook - Hook successful\n");}if(hookHandle_kb == NULL){printf("C++: Java_SysHook_registerKeyHook - Hook failed!\n"); return;}else{printf("C++: Java_SysHook_registerKeyHook - Hook successful\n");}hookObj_kb = env->NewGlobalRef(obj);jclass cls_kb = env->GetObjectClass(hookObj_kb);processKeyID_kb = env->GetMethodID(cls_kb,"processKey","(ZILGlobalEventListener;)V") ;hookObj_ms = env->NewGlobalRef(obj);jclass cls_ms = env->GetObjectClass(hookObj_ms);processKeyID_ms = env->GetMethodID(cls_ms,"mouseMoved","(IILGlobalEventListener;)V") ;env->GetJavaVM(&jvm);hookThreadId = GetCurrentThreadId();MsgLoop();if(!UnhookWindowsHookEx(hookHandle_kb)){printf("C++: Java_SysHook_registerKeyHook - Unhook failed\n");}else{printf("C++: Java_SysHook_registerKeyHook - Unhook successful\n"); }if(!UnhookWindowsHookEx(hookHandle_ms)){printf("C++: Java_SysHook_registerKeyHook - Unhook failed\n");}else{printf("C++: Java_SysHook_registerKeyHook - Unhook successful\n"); }}JNIEXPORTvoidJNICALL Java_SysHook_unRegisterHook(JNIEnv *env, jobject object){if(hookThreadId == 0)return;printf("C++: Java_SysHook_unRegisterKeyHook - call PostThreadMessage.\n");PostThreadMessage(hookThreadId, WM_QUIT, 0, 0L);}SysHook.h:1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 /* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class SysHook */#ifndef _Included_SysHook#define _Included_SysHook#ifdef __cplusplusextern"C"{#endif/** Class: SysHook* Method: registerHook* Signature: (LGlobalEventListener;)V*/JNIEXPORTvoidJNICALL Java_SysHook_registerHook (JNIEnv *, jobject, jobject);/** Class: SysHook1 4 1 5 1 6 1 7 1 8 1 92 0 2 1 2 2 23 24 25 26 27 * Method: unRegisterHook* Signature: ()V*/JNIEXPORTvoidJNICALL Java_SysHook_unRegisterHook (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endifKeyboardEventListener.java1 2 3 4 5 6 7 8 9 1 0 1 1 1importjava.util.*; publicinterfaceKeyboardEventListenerextendsEventListener { publicvoidGlobalKeyPressed(KeyboardEvent event); publicvoidGlobalKeyReleased(KeyboardEvent event);}classKeyboardEventextendsEventObject { privatestaticfinallongserialVersionUID = 2341653211621224652L;booleants, ap, ek;intvk;publicKeyboardEvent(Objectsource,booleants,intvk,booleanap,booleanek) {super(source);2 13 14 15 16 17 18 19 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3this.ts = ts;this.vk = vk;this.ap = ap;this.ek = ek;}publicbooleangetTransitionState() { returnts;}publiclonggetVirtualKeyCode() {returnvk;}publicbooleanisAltPressed() {returnap;}publicbooleanisExtendedKey() {returnek;}publicbooleanequals(KeyboardEvent event) { if(event.getVirtualKeyCode() == vk) {if(event.isExtendedKey() == ek) {if(event.isAltPressed() == ap) { returntrue;}}}returnfalse;}}435363738394414243444546474849 MouseEventListenter.java1 2 3 4 5 6 7 8 9 1 0 importjava.util.*; publicinterfaceMouseEventListenerextendsEventListene r {publicvoidGlobalMouseX(MouseEvent event); publicvoidGlobalMouseY(MouseEvent event);}classMouseEventextendsEventObject { privatestaticfinallongserialVersionUID = 14654L; intcord_x, cord_y;publicMouseEvent(Object source,intcord_x,intcord_y) { super(source);1 1 12 13 14 15 16 17 18 19 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 this.cord_x = cord_x; this.cord_y = cord_y; }publicintgetMouseX() { returncord_x;}publicintgetMouseY() { returncord_y;}}GlobalEventListener.java :1 2 3 4 5 6 publicclassGlobalEventListener { PoolHook pt; publicGlobalEventListener() {pt =newPoolHook(this);pt.start();}7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3protectedjavax.swing.event.EventListenerList listenerList =newjavax.swing.event.EventListenerList(); publicvoidaddKeyboardEventListener(KeyboardEventListener listener) {listenerList.add(KeyboardEventListener.class, listener);}publicvoidremoveKeyboardEventListener(KeyboardEventListener listener) {listenerList.remove(KeyboardEventListener.class, listener);}publicvoidaddMouseEventListener(MouseEventListener listener) { listenerList.add(MouseEventListener.class, listener);}publicvoidremoveMouseEventListener(MouseEventListener listener) { listenerList.remove(MouseEventListener.class, listener);}voidkeyPressed(KeyboardEvent event) {Object[] listeners = listenerList.getListenerList();for(inti =0; i < listeners.length; i +=2) {if(listeners[i] == KeyboardEventListener.class) { ((KeyboardEventListener) listeners[i +1]).GlobalKeyPressed(event);}}}voidmouseMoved(MouseEvent event) {Object[] listeners = listenerList.getListenerList();for(inti =0; i < listeners.length; i +=2) {if(listeners[i] == MouseEventListener.class) { ((MouseEventListener) listeners[i +1]).GlobalMouseX(event); ((MouseEventListener) listeners[i +1]).GlobalMouseY(event);}}}voidkeyReleased(KeyboardEvent event) {Object[] listeners = listenerList.getListenerList();for(inti =0; i < listeners.length; i +=2) {if(listeners[i] == KeyboardEventListener.class) { ((KeyboardEventListener) listeners[i +1]).GlobalKeyReleased(event);}}}}0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5535455565758 SysHook.java:1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 classPoolHookextendsThread {SysHook hook;GlobalEventListener g_gl;PoolHook(GlobalEventListener gl) {g_gl = gl;}publicvoidrun() {hook =newSysHook();hook.registerHook(g_gl);}}classSysHook {static{System.loadLibrary("SysHook");}voidprocessKey(booleants,intvk, GlobalEventListener gl) { KeyboardEvent event =newKeyboardEvent(this, ts, vk,false,false);gl.keyPressed(event);}voidmouseMoved(intcord_x,intcord_y, GlobalEventListener gl) { MouseEvent event =newMouseEvent(this, cord_x, cord_y);gl.mouseMoved(event);}nativevoidregisterHook(GlobalEventListener gl); nativevoidunRegisterHook();}2122232425262728293313233343536 Example.java:1 2 3 4 5 6 7 8 publicclassExampleimplementsKeyboardEventListener, MouseEventListener {staticGlobalEventListener gl;publicstaticvoidmain(String[] args)throwsException { Example inst =newExample();gl =newGlobalEventListener();gl.addKeyboardEventListener(inst);gl.addMouseEventListener(inst);1 0 1 1 12 13 14 15 16 17 18 19 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3@OverridepublicvoidGlobalKeyPressed(KeyboardEvent event) {System.out.println("Key Pressed: "+ event.getVirtualKeyCode()); }@OverridepublicvoidGlobalKeyReleased(KeyboardEvent event) {}@OverridepublicvoidGlobalMouseX(MouseEvent event) {System.out.println("Mouse X: "+ event.getMouseX());}@OverridepublicvoidGlobalMouseY(MouseEvent event) {System.out.println("Mouse Y: "+ event.getMouseY());}}3233C++文件需要用Visual Studio编译为你的目标系统的DLL文件。

相关文档
最新文档