java JButton(按钮)绑定键盘

d406252394 2010-10-03 11:59:56
我写了个计算器程序,为每一个JButton都注册了两个监听器
一个监听器类是承接ActionListener接口,监听对Button本身的操作
另一个是继承KeyAdapter类,监听键盘,用getKeyChar()判断,然后调用JButton的doClick();
但是运行后。一开始按键盘程序没反应。只有用鼠标点了某个JButton后,程序才会开始响应键盘
...全文
720 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
d406252394 2010-10-04
  • 打赏
  • 举报
回复
回复2楼
设定焦点的方法我试过了,不管用。
你按钮绑定键盘事件的方法我没用过,试着改了下,用你那种办法还可以;
就是每个按钮都要绑定一次;大小键盘都得弄一个稍微有麻烦。而且到现在还没想到我原来的为什么会这样。纠结ing
谢谢了
hbin_apple 2010-10-04
  • 打赏
  • 举报
回复
学习~~
like_java 2010-10-04
  • 打赏
  • 举报
回复
顶!!!!!!!!!!!!!!
Tassdars 2010-10-04
  • 打赏
  • 举报
回复
楼主在JFrame调用setVisible(true)方法之后加上一句JFrame.requestFocus()就行了,默认窗体没焦点,获取不到键盘事件。另外,按钮绑定键盘事件没必要这么麻烦,看我下面的例子:

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

public class Test {
public static void main(String[] args) {
final JFrame frame = new JFrame();
frame.setSize(400, 300);
JButton button = new JButton("按钮");
InputMap inputMap = button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
ActionMap actionMap = button.getActionMap();
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_HOME, 0), "home");
actionMap.put("home", new AbstractAction(){
public void actionPerformed(ActionEvent event) {
JOptionPane.showMessageDialog(frame, "你按下了HOME键");
}
});
frame.add(new JButton("按钮"), BorderLayout.NORTH);
frame.add(button, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

62,635

社区成员

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

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