用addKeyListener实现键盘事件的响应,为什么没有反应?高手进!

rick111111 2004-06-28 04:05:23
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TestKey extends JFrame implements KeyListener{
public TestKey(){
setSize(200,100);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] argv){
TestKey tk = new TestKey();
}

public void keyPressed(KeyEvent e){
}

public void keyReleased(KeyEvent e){
}

public void keyTyped(KeyEvent e){
JOptionPane.showMessageDialog(
null,
"succeed",
"Show",
JOptionPane.INFORMATION_MESSAGE);

}
}
...全文
1246 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
binny 2004-06-29
  • 打赏
  • 举报
回复
网上有许多俄罗斯方块的例子,你可以找几份参考一下呀
rick111111 2004-06-29
  • 打赏
  • 举报
回复
刚刚看了一个程序, 通过在每个可能得到焦点的控件上加了addKeyListener(), 解决了键盘控制的问题. 我试了一下, 可以用了, 有没有什么更好的解决办法吗?

怎么才能通过多线程解决? 有没有什么具体的例子?
maowu 2004-06-28
  • 打赏
  • 举报
回复
可以另外开一条线程,不停的检查是否有按键按了下来。
rick111111 2004-06-28
  • 打赏
  • 举报
回复
多谢楼上,不过如果我想写一个类似俄罗斯方块的程序, 要实现键盘控制, 应该怎样做呢?
难道每个控件都要写上addKeyListener?
binny 2004-06-28
  • 打赏
  • 举报
回复
不知道你的目的是什么,你修改后的程序运行后,焦点在按钮上面,所以按键事件被提交到按钮,而你的按钮没有add Listener,所以不会有响应

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TestKey extends JFrame implements KeyListener{
public TestKey(){
JPanel j = new JPanel();
JButton b = new JButton("button");
b.addKeyListener(this); //<----------------here
j.add(b);
getContentPane().add(j);
addKeyListener(this);

setSize(200,100);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] argv){
TestKey tk = new TestKey();
}

public void keyPressed(KeyEvent e){
}

public void keyReleased(KeyEvent e){
}

public void keyTyped(KeyEvent e){
JOptionPane.showMessageDialog(
null,
"succeed",
"Show",
JOptionPane.INFORMATION_MESSAGE);

}
}
rick111111 2004-06-28
  • 打赏
  • 举报
回复
我在构造函数里面加了是一样的啊
zhmain 2004-06-28
  • 打赏
  • 举报
回复
还是要在main方法中加tk.addKeyListener(tk);
rick111111 2004-06-28
  • 打赏
  • 举报
回复
谢谢两位,不过再问一句,我的程序中在JFrame上面有加了一个JPanel,JPanel上面加一个JButton,为什么又不能响应键盘事件了呢?
多谢!

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TestKey extends JFrame implements KeyListener{
public TestKey(){
JPanel j = new JPanel();
JButton b = new JButton("button");
j.add(b);
getContentPane().add(j);
addKeyListener(this);

setSize(200,100);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] argv){
TestKey tk = new TestKey();
}

public void keyPressed(KeyEvent e){
}

public void keyReleased(KeyEvent e){
}

public void keyTyped(KeyEvent e){
JOptionPane.showMessageDialog(
null,
"succeed",
"Show",
JOptionPane.INFORMATION_MESSAGE);

}
}
maowu 2004-06-28
  • 打赏
  • 举报
回复
在main方法里增加一行:

public static void main(String[] argv){
TestKey tk = new TestKey();
tk.addKeyListener(tk); //增加这一行。

}
binny 2004-06-28
  • 打赏
  • 举报
回复
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TestKey extends JFrame implements KeyListener{
public TestKey(){
setSize(200,100);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addKeyListener(this); //<---------------here
}

public static void main(String[] argv){
TestKey tk = new TestKey();
}

public void keyPressed(KeyEvent e){
}

public void keyReleased(KeyEvent e){
}

public void keyTyped(KeyEvent e){
JOptionPane.showMessageDialog(
null,
"succeed",
"Show",
JOptionPane.INFORMATION_MESSAGE);

}
}

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧