JAVA中的一些奇怪的行为

tvo*_*olf 2 java swing

我已经创建了简单的代码片段来演示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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个JFrame组件上面有一个JButton.JButton有一个快捷方式(键盘号码1).

当我按下1键盘的顶行时,动作正在执行.它正在创建JDialog一个组件-- JTextField. 关于什么是奇怪的

当我按下1,这个数字有时打印的JTextField区域JDialog.它有时会发生.它似乎取自键盘缓冲区.

JDialog打开之前如何清除它?还是有其他解决方案吗?

提前致谢.

Boa*_*ann 5

尝试绑定到键释放事件,而不是按键事件,以便在对话框打开时确定释放键:

KeyStroke btnShortcut = KeyStroke.getKeyStroke(KeyEvent.VK_1, 0, true);
                                                                 ^^^^
Run Code Online (Sandbox Code Playgroud)