用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);

}
}
...全文
1156 10 打赏 收藏 转发到动态 举报
写回复
用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);

}
}
当你将一个类用作事件监听器时,你已经设置好一个特定的事件类型,它会用该类行监听。接下来的操作是:一个匹配的监听器必须被加入到该组件中 组件被创建之后,可以在组件上调用如下方法来将监听器与它联系起来 addActionListener( ) 可用于 Button,Check, TexyField 等组件 addAdjustmentListener( ) 可用于 ScrollBar 组件 addFocusListener( ) 可用于所有可视化组件 addItemListener( ) 可用于 Button,CheckBox 等组件 addKeyListener( ) 可用于所有可视化组件 addMouseListener( ) 可用于所有可视化组件 addMouseMotionListener( ) 可用于所有可视化组件 addWindowsListener( ) 可用于 Window,Frame等组件 例:下面语句创建一个 Button 对象,并将它与动作事件监听器联系起来 Button button = new Button( “OK” ) ; button . addActionListener ( this ) ; //this 指明当前类就是事件监听器 2 使用方法 (1)动作事件(ActionEvent) 发生在用户完成了使用下列组件之一的动作: Button , CheckBox , ComboBox , TextField , RadioButton 类为了能够处理这些事件必须实现接口 ActionListener 。 每个产生一个动作事件的组件上要调用方法 addActionListener( ) 方法 actionPerformed(ActionEvent evt) 是接口 ActionListener 惟一的 方法采用如下格式: public void actionPerformed(ActionEvent evt) { //…… } 在 ActionEvent 对象上可以使用的方法: getSource( ) 获取产生事件组件的组件名 getActionCommand( ) 获取与组件有关的文本,如命令按钮的标签 键盘事件(KeyEvent) 发生在键盘上的某个键被按下时。 类为了能够处理这些事件必须实现接口 KeyListener 。 每个产生一个键盘事件的组件上要调用方法 addKeyListener( ) 在接口 KeyListener 中有三个方法: public void keyPressed(KeyEvent evt) { //…… } public void keyReleased(KeyEvent evt) { //…… } public void keyTyped(KeyEvent evt) { //…… } 在 KeyEvent 对象上可以使用的方法: getKeyChar( ) 返回与事件相关的键盘字符的 Unicode 码 . . . . . . . . . .
6.2.4 事件适配器 适配器类实现一个对应的所有接口,只是方法为空。 public abstract class WindowAdapter implements WindowListener { public void windowOpened(WindowEvent e) {} public void windowActivated(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} public void windowClosed(WindowEvent e) {} public void windowClosing(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} } 表6.1 Listener接口与对应的适配器(Adapter)类 接口名称 适配器名称 ComponentListener ComponentAdapter ContainerListener ContainerAdapter FocusListener FocusAdapter KeyListener KeyAdapter MouseListener MouseAdapter MouseMotionListener MouseMotionAdapter WindowListener WindowAdapter (7)鼠标运动事件 鼠标运动事件发生在鼠标移过某个组件时。 任何组件都可以产生这些事件,通过接口 MouseMotionListener 实现。 该接口有两个方法: mouseDragged(MouseEvent) mouseMove(MouseEvent) MouseMotionListener 没有自己的事件类型,替代它的是 MouseEvent 。 被用在 MouseEvent 对象上的方法它都可以使用: getClickCount( ) 返回鼠标被单击次数(整数) getPoint( ) 返回鼠标被单击位置的 x ,y 坐标 getX( ) 返回 x 位置 getY( ) 返回 y 位置 (8)窗口事件(WindowEvent) 窗口事件发生在用户打开或关闭一个诸如 Frame 或 Window 的窗口时。任何组件都可以产生这些事件,为了支持它们,类必须实现接口:WindowListener。 接口 WindowListener 中有七个方法: windowActivated(WindowEvent) 窗口被激活 windowClosed (WindowEvent) 窗口已关闭 windowClosing (WindowEvent) 窗口正在关闭 windowDeactivated (WindowEvent) 窗口失效 windowDeiconified (WindowEvent) 窗口正常化时 windowIconified (WindowEvent) 窗口最小化时 windowOpened (WindowEvent) 窗口被打开 (5)键盘事件(KeyEvent) 发生在键盘上的某个键被按下时。 类为了能够处理这些事件必须实现接口 KeyListener 。 每个产生一个键盘事件的组件上要调用方法 addKeyListener( ) 在接口 KeyListener 中有三个方法: public void keyPressed(KeyEvent evt) { //…… } public void keyReleased(KeyEvent evt) { //…… } public void keyTyped(KeyEvent evt) { //…… } 在 KeyEvent 对象上可以使用的方法: getKeyChar( ) 返回与事件相关的键盘字符的 Unicode 码 . . . . . . . . . . . . . .

62,615

社区成员

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

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