怎样实现JAVA全局键盘监听 最好是给一段代码?谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 查下windows 帮助吧! 项目中用到的一个类!package com.sysdynamic.slideshow;import com.sysdynamic.set.SlideShowSetting;import java.awt.*;import java.awt.BorderLayout;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.util.List;import javax.swing.*;/** * 幻灯片的实现类 *相册中的相片以幻灯片的形式查看 * @author Andy Yang * @email [email protected] * */public class BasicSlideShow extends JFrame implements KeyListener, Runnable, IBasicSlideShow { private static final long serialVersionUID = 1L; static ISlideShow slideShow; BorderLayout borderLayout1; List albumObjects; JLabel imageLabel; static Dimension screenSize; Thread threads; int falg = 0; BasicSlideShow bss; String sleepTime; SlideShowSetting slideShowSetting = new SlideShowSetting(); /** * 无参构造方法 */ public BasicSlideShow() { borderLayout1 = new BorderLayout(); imageLabel = new JLabel(); screenSize = getGraphicsConfiguration().getBounds().getSize(); this.albumObjects = albumObjects; sleepTime = slideShowSetting.querySlideShowSetting(); try { jbInit(); } catch (Exception ex) { } } /** * 转换图片 * @param icons 转换为下一张的图片 */ void showImage(Icon icons) { try { imageLabel.setIcon(icons); } catch (Exception ex) { ex.printStackTrace(System.err); } } void jbInit() throws Exception { this.addKeyListener(this); setUndecorated(true); Container c = getContentPane(); imageLabel.setHorizontalAlignment(0); c.setBackground(Color.black); c.addMouseListener(new BasicSlideShow_c_mouseAdapter(this)); c.setLayout(borderLayout1); setSize(screenSize); c.add(imageLabel, java.awt.BorderLayout.CENTER); } public static void main(String[] args) { // slideShow = new SlideShow("F:\\新建文件夹" // ); // "C:\\Users\\Public\\Pictures\\Sample Pictures" // BasicSlideShow bss = new BasicSlideShow(); // bss.showImage(slideShow.first()); // bss.setVisible(true); } /** * 播放幻灯片 * @param List imageList 图片集合 */ public void starts(List imageList) { slideShow = new SlideShow(imageList); bss = new BasicSlideShow(); bss.showImage(slideShow.first()); bss.setVisible(true); } /** * 关闭 */ public int close() { int value = 0; // int value = JOptionPane.showOptionDialog(null, "From slides !", // "Messages", // 0, 1, null, null, null); return value; } public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case 27: // '\033' int j = 0; if (threads != null) { this.stop(); j = 1; } if (close() == 0) { this.setVisible(false); this.dispose(); } else { if (j == 1) { this.starts(); } } break; case 10: // '\n' case 32: // ' ' case 34: // '"' case 39: // '\'' case 40: // '(' this.showImage(slideShow.forward()); //下一张 break; case 8: // '\b' case 33: // '!' case 37: // '%' case 38: // '&' this.showImage(slideShow.backward()); //上一张 break; case 36: // '$' this.showImage(slideShow.first()); //第一张 break; case 35: // '#' this.showImage(slideShow.last()); //最后一张 break; case 122: if ((falg % 2) == 0) { this.starts(); falg++; } else { this.stop(); falg--; } break; } } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } /** * 开始幻灯片播放 */ public void starts() { if (threads == null) { threads = new Thread(this); threads.start(); } } /** * 暂停幻灯播放 */ public void stop() { if (threads != null) { threads.stop(); } threads = null; } /** *放映幻灯片 */ public void run() { while (threads != null) { this.showImage(slideShow.forward()); try { threads.sleep(Integer.parseInt(sleepTime)); } catch (InterruptedException ex) { threads = null; } } } /** * 单击事件上下放映 * @param e MouseEvent */ public void c_mouseClicked(MouseEvent e) { if (e.getButton() == 1) { this.showImage(slideShow.forward()); } else if (e.getButton() == 3) { this.showImage(slideShow.backward()); } }}class BasicSlideShow_c_mouseAdapter extends MouseAdapter { private BasicSlideShow adaptee; BasicSlideShow_c_mouseAdapter(BasicSlideShow adaptee) { this.adaptee = adaptee; } public void mouseClicked(MouseEvent e) { adaptee.c_mouseClicked(e); }} 现在MARK都不行了,还得多打几个字,郁闷 关于键盘监听,我也想知道,java能实现在后台运行时对键盘进行监听吗?换句话说,也就是运行窗口主体失去焦点以后(比如最小化到托盘区),还能够监听到键盘的快捷键。 java.awt.Toolkit.getDefaultToolkit().addAWTEventListener(listener, AWTEvent.KEY_EVENT_MASK);listener是你自己定义的监听器 Toolkit.getDefaultToolkit().addAWTEventListener(listener,eventMask);这个方法注册全局的监听机制,无论哪个窗口。里面注册为weakHashmap,应该不用考虑垃圾回收问题 Java本身是做不了键盘的全局监听的(就是在失去焦点的情况下监听键盘),javaGUI中的鼠标,键盘监听器都是在组件获得焦点时才会触发的!所以用单纯的Java做全局监听是做不了的,不过可以使用调用jni的方式实现!有一个开源项目正是封装了jni的复杂麻烦的调用操作。我试用了一下,感觉很不错!我的百度博客里面有使用的情况。http://hi.baidu.com/wzwahl36/blog/item/79b47813ed0e87c5f7039efd.html 字符串拆分,输出问题 正则表达式的问题 请问:如果我想把.class文件和.java文件分开存放,在JCreator中应该怎么设置?谢谢!! 请教对象数组的问题 关于视频监控 请教怎样获得记录集的整条记录的信息?在线等!!!急!!! 这样的Sql语句怎么会取不到记录集出来? 请问exception类中的方法printStackTrace()是做什么用的? 求救!! JVM占用内存平稳但系统内存一直在增加直到耗尽 如何从USB摄像头获得视频输入 请问,poi写excel文件,如何生成下拉框
windows 帮助吧!
import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;import java.util.List;import javax.swing.*;/**
* 幻灯片的实现类
*相册中的相片以幻灯片的形式查看
* @author Andy Yang
* @email [email protected]
*
*/
public class BasicSlideShow extends JFrame implements KeyListener, Runnable,
IBasicSlideShow { private static final long serialVersionUID = 1L;
static ISlideShow slideShow;
BorderLayout borderLayout1;
List albumObjects;
JLabel imageLabel;
static Dimension screenSize;
Thread threads;
int falg = 0;
BasicSlideShow bss;
String sleepTime;
SlideShowSetting slideShowSetting = new SlideShowSetting(); /**
* 无参构造方法
*/
public BasicSlideShow() {
borderLayout1 = new BorderLayout();
imageLabel = new JLabel();
screenSize = getGraphicsConfiguration().getBounds().getSize();
this.albumObjects = albumObjects;
sleepTime = slideShowSetting.querySlideShowSetting(); try {
jbInit();
} catch (Exception ex) {
}
} /**
* 转换图片
* @param icons 转换为下一张的图片
*/
void showImage(Icon icons) {
try {
imageLabel.setIcon(icons);
} catch (Exception ex) {
ex.printStackTrace(System.err);
}
} void jbInit() throws Exception {
this.addKeyListener(this);
setUndecorated(true); Container c = getContentPane();
imageLabel.setHorizontalAlignment(0);
c.setBackground(Color.black);
c.addMouseListener(new BasicSlideShow_c_mouseAdapter(this));
c.setLayout(borderLayout1);
setSize(screenSize);
c.add(imageLabel, java.awt.BorderLayout.CENTER);
} public static void main(String[] args) {
// slideShow = new SlideShow("F:\\新建文件夹"
// ); // "C:\\Users\\Public\\Pictures\\Sample Pictures"
// BasicSlideShow bss = new BasicSlideShow();
// bss.showImage(slideShow.first());
// bss.setVisible(true);
} /**
* 播放幻灯片
* @param List imageList 图片集合
*/
public void starts(List imageList) {
slideShow = new SlideShow(imageList);
bss = new BasicSlideShow();
bss.showImage(slideShow.first());
bss.setVisible(true);
} /**
* 关闭
*/
public int close() {
int value = 0; // int value = JOptionPane.showOptionDialog(null, "From slides !",
// "Messages",
// 0, 1, null, null, null);
return value;
} public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case 27: // '\033' int j = 0; if (threads != null) {
this.stop();
j = 1;
} if (close() == 0) {
this.setVisible(false);
this.dispose();
} else {
if (j == 1) {
this.starts();
}
} break; case 10: // '\n'
case 32: // ' '
case 34: // '"'
case 39: // '\''
case 40: // '('
this.showImage(slideShow.forward()); //下一张 break; case 8: // '\b'
case 33: // '!'
case 37: // '%'
case 38: // '&'
this.showImage(slideShow.backward()); //上一张 break; case 36: // '$'
this.showImage(slideShow.first()); //第一张 break; case 35: // '#'
this.showImage(slideShow.last()); //最后一张 break; case 122: if ((falg % 2) == 0) {
this.starts();
falg++;
} else {
this.stop();
falg--;
} break;
}
} public void keyReleased(KeyEvent e) {
} public void keyTyped(KeyEvent e) {
} /**
* 开始幻灯片播放
*/
public void starts() {
if (threads == null) {
threads = new Thread(this);
threads.start();
}
} /**
* 暂停幻灯播放
*/
public void stop() {
if (threads != null) {
threads.stop();
} threads = null;
} /**
*放映幻灯片
*/
public void run() {
while (threads != null) {
this.showImage(slideShow.forward()); try {
threads.sleep(Integer.parseInt(sleepTime));
} catch (InterruptedException ex) {
threads = null;
}
}
} /**
* 单击事件上下放映
* @param e MouseEvent
*/
public void c_mouseClicked(MouseEvent e) {
if (e.getButton() == 1) {
this.showImage(slideShow.forward());
} else if (e.getButton() == 3) {
this.showImage(slideShow.backward());
}
}
}class BasicSlideShow_c_mouseAdapter extends MouseAdapter { private BasicSlideShow adaptee; BasicSlideShow_c_mouseAdapter(BasicSlideShow adaptee) {
this.adaptee = adaptee;
} public void mouseClicked(MouseEvent e) {
adaptee.c_mouseClicked(e);
}
}
这个方法注册全局的监听机制,无论哪个窗口。里面注册为weakHashmap,应该不用考虑垃圾回收问题
所以用单纯的Java做全局监听是做不了的,不过可以使用调用jni的方式实现!有一个开源项目正是封装了jni的复杂麻烦的调用操作。我试用了一下,感觉很不错!
我的百度博客里面有使用的情况。http://hi.baidu.com/wzwahl36/blog/item/79b47813ed0e87c5f7039efd.html