繁体   English   中英

JAVA中一些奇怪的行为

[英]Some strange behaviour in JAVA

我创建了简单的代码片段,以演示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);
    }
}

我有一个带有JButton JFrame组件。 JButton有一个快捷方式(键盘编号1 )。

当我在键盘的第一行按1时,动作正在执行。 它正在创建JDialog在其中使用一个组件JTextField 那么奇怪的是

当我按1 ,该数字有时会打印在JDialog JTextField区域中。 有时会发生。 它似乎是从键盘缓冲区中获取的。

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

提前致谢。

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

KeyStroke btnShortcut = KeyStroke.getKeyStroke(KeyEvent.VK_1, 0, true);
                                                                 ^^^^

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM