我现在做一个程序需要实时得跟踪键盘的输入,当客户输入回车键后,需要将客户在输回车前面所输的内容到数据库里去匹配,然后进行相应的操作。我是用KeyAdapter类的监听功能,但我这个程序是希望运行在后台,也就是说当这个程序启动的时候,无论客户在那里输入内容(在ie,word等其他应用程序),都将被记录下来,但目前好像只能在程序里起一个JPanal,并且把这个Panel设成focus后才会记录.这样,我在切换到其他应用程序时就不会监听成功了.
------解决方案--------------------------------------------------------
貌似你这个非法
------解决方案--------------------------------------------------------
我好像是没想到
------解决方案--------------------------------------------------------
只用java是做不了的,要用Windows的系统钩子进行。因为你的程序是运行在java平台上的,不可能超出java虚拟机的范围,java虚拟机是一个进程,ie,word是其他的进程,要想捕获其他发给其他进程的消息,必须站在系统的角度才能做到,在自己的进程里面再折腾也不能得到别的进程的任何信息。
------解决方案--------------------------------------------------------
import java.awt.BorderLayoutimport java.awt.event.KeyAdapter
import java.awt.event.KeyEvent
import java.io.Serializable
import javax.swing.JFrame
import javax.swing.JLabel
import javax.swing.JTextField
public class TextTest extends JFrame implements Serializable {
private static final long serialVersionUID=1L
private JTextField jtf
private JLabel jab
TextTest(){
this.setBounds(300,300,300,200)
this.setTitle("文本测试")
this.setResizable(false)
init()
this.setVisible(true)
}
public static void main(String[] args) {
new TextTest()
}
private void init() {
this.setDefaultCloseOperation(3)
jab=new JLabel("字符检测")
jtf=new JTextField(30)
myEve()
this.add(jtf,BorderLayout.NORTH)
this.add(jab,BorderLayout.SOUTH)
}
private void myEve() {
jtf.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent k) {
int x=jtf.getText().length()
if(x>2) {
k.consume()
jab.setText("警告,字数超限,禁止输入!")
}else {
jab.setText("允许输入:")
}
}
})
}
}