我创建了简单的代码片段来演示JAVA的一些奇怪的东西。
public class Start extends JFrame {
public static JFrame mainFrame;
public static void main(String[] args) {
JFrame f = new JFrame();
mainFrame = f;
f.setSize(400, 400);
Action btn_action = new AbstractAction() {
public void actionPerformed(ActionEvent arg0) {
System.out.println("test");
JDialog d = new JDialog(mainFrame, "Test Dialog", true);
d.setSize(200, 200);
d.setLocationRelativeTo(null);
JTextField text = new JTextField();
d.add(text);
d.setVisible(true);
}
};
JButton btn = new JButton(btn_action);
btn.setText("Click me");
KeyStroke btnShortcut = KeyStroke.getKeyStroke(KeyEvent.VK_1, 0);
btn.getActionMap().put("btn_click", btn_action);
btn.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(btnShortcut, "btn_click");
f.add(btn);
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
我有JFrame
组件,上面有JButton
。 JButton
有一个快捷方式(键盘号1
)。
当我在键盘顶行按1
时,操作正在执行。它正在使用一个组件创建JDialog
- JTextField
。1
。关于什么是奇怪的
当我按JTextField
时,该号码有时会打印在JDialog
JDialog
区域内。它有时会发生。它似乎取自键盘缓冲区。
如何在{{1}}开放之前清除它?还是有另一种解决方案吗?
提前致谢。
答案 0 :(得分:5)
尝试绑定到密钥释放事件,而不是按键事件,以便在对话框打开时明确释放密钥:
KeyStroke btnShortcut = KeyStroke.getKeyStroke(KeyEvent.VK_1, 0, true);
^^^^