
把你的代码按照你的意思改动了一下,应该可以满足你的要求:
import javaawt;
import javaawtevent;
import javaxswing;
public class KeyEventDemo extends JFrame implements ActionListener, KeyListener {
JTextField txt1;
JButton btnOK;
JPanel pnlMain;
public KeyEventDemo() {
pnlMain = new JPanel();
setContentPane(pnlMain);
txt1 = new JTextField(10);
btnOK = new JButton("确认");
txt1addKeyListener(this); //应该是在 TextField 里添加键盘监听事件
btnOKaddActionListener(this);//在按钮上添加事件监听
pnlMainsetLayout(new BorderLayout());//添加布局器
pnlMainadd(txt1,BorderLayoutNORTH); //TextField 布局在上方
pnlMainadd(btnOK,BorderLayoutSOUTH); //Button 布局在下方
setTitle("好啊");
setSize(300, 200);
setVisible(true);//viersible() 函数应该放在最后
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void keyTyped(KeyEvent e) { //6
char c = egetKeyChar();
if (c == 'o') {
Systemoutprintln("快捷键 " + egetKeyChar() + " 按下" );
txt1setText("收到,呵呵");
}else{
Systemoutprintln("普通键 " + egetKeyChar() + " 按下" );
}
}
public void actionPerformed(ActionEvent event){
Systemoutprintln("按钮按下");
}
public void keyPressed(KeyEvent e) {} //函数要和接口 KeyListener 中定义的一摸一样
public void keyReleased(KeyEvent e) {} //函数要和接口 KeyListener 中定义的一摸一样
public static void main(String[] args) {
new KeyEventDemo();
}
}
额,抽象类其实就是定义了一些接口但又没有去实现的类,这些类定义了接口等它的子类来实现,如果它的子类没有实现这些接口,那么这些子类也是抽象类。抽象类是不能用 new 的方式产生的。
你似乎问错了,应该问接口是啥子东西,接口是。。。。一大堆的东西好难策清楚,看看下面的链接吧,会受益良多的:
>
用java监听键盘输入
我现在做一个程序需要实时得跟踪键盘的输入,当客户输入回车键后,需要将客户在输回车前面所输的内容到数据库里去匹配,然后进行相应的 *** 作。我是用KeyAdapter类的监听功能,但我这个程序是希望运行在后台,也就是说当这个程序启动的时候,无论客户在那里输入内容(在ie,word等其他应用程序),都将被记录下来,但目前好像只能在程序里起一个JPanal,并且把这个Panel设成focus后才会记录这样,我在切换到其他应用程序时就不会监听成功了
------解决方案--------------------------------------------------------
貌似你这个非法
------解决方案--------------------------------------------------------
我好像是没想到
------解决方案--------------------------------------------------------
只用java是做不了的,要用Windows的系统钩子进行。因为你的程序是运行在java平台上的,不可能超出java虚拟机的范围,java虚拟机是一个进程,ie,word是其他的进程,要想捕获其他发给其他进程的消息,必须站在系统的角度才能做到,在自己的进程里面再折腾也不能得到别的进程的任何信息。
------解决方案--------------------------------------------------------
给你找个例子,看看内部类和匿名内部类的区别:
protected abstract class ExtValueListener implements ActionListener
{
public ExtValueListener(String listenerName) {
thislistenerName = TOPIC_NAME + "" + listenerName + "listener";
}
public String getListenerName() {
return listenerName;
}
}
-----------------------------------------
这里定义了一个抽象类,也就意味着这个类不能被生成实例对象,但是他的子类可以生成对象
在这个抽象类中定义了构造器,一个方法
-----------------------------------------
SourceaddValueListener(new ExtValueListener() {
public void valueChanged(ValueInt value) {
if (!IsSetOk) {
setAllLimits();
} }
});
-----------------------------------------
现在来说说这段程序:
程序中的一个方法:SourceaddValueListener(); 在这个方法中有一个匿名内部类:
new ExtValueListener() {
public void valueChanged(ValueInt value) {
if (!IsSetOk) {
setAllLimits();
} }
}
匿名内部类没有类名,直接就new ExtValueListener() ,这句语句说明生成了一个ExtValueListener抽象类的子类,但是这个子类是什么名字是不知道的,所以说是匿名内部类,就等同于在这里定义一个类来扩展ExtValueListener这个抽象类,下面的方法就是这个匿名内部类的方法,当然他是扩展了ExtValueListener类的,是ExtValueListener的子类,所以ExtValueListener类中的方法在这里也是可以使用的。
所以,你的addKeyListener实际上要用一个匿名内部类来实现。
import javaawteventKeyAdapter;
import javaawteventKeyEvent;
import javaxswingJButton;
import javaxswingJFrame;
public class KeyDemo extends JFrame{
JButton jb = new JButton();
public KeyDemo(){
thisaddKeyListener(new MyListener());
jbaddKeyListener(new MyListener());
thisadd(jb);
thissetSize(200,200);
thissetVisible(true);
}
public class MyListener extends KeyAdapter{
public void keyPressed(KeyEvent arg0) {
Systemoutprint("那句话");
}
}
public static void main(String[] aregs){
new KeyDemo();
}
}
注册监听器你应该知道噻
注意了注册监听这里不像ActionListener那样用按钮注册
这里可以注册的对象很多
你可以用一个按钮 但最好用窗口
要让键盘有反应 一定要在注册监听器后 用注册的那个对象去获得焦点
每个对象好象都有方法去主动获得焦点的
以上就是关于Java键盘监听事件(急啊!)全部的内容,包括:Java键盘监听事件(急啊!)、Java Swing中的键盘监听事件、用java监听键盘输入,该如何解决等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)