【问题标题】:How to make Enter key and Submit button have same ActionEvent?如何使 Enter 键和提交按钮具有相同的 ActionEvent?
【发布时间】:2016-05-18 22:11:28
【问题描述】:

所以我有一个带有ActionEvent 的提交按钮,它由大约 50 行代码组成。每当它检测到按下 Enter 键时,我如何为 JFrame 分配完全相同的 ActionEvent 作为提交按钮?这就是我提交按钮的ActionEvent 的样子

        btnSubmit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
             // miscellaneous code that needs to be repeated for 'Enter' key press
           }
        });

为 JFrame 提供与“提交”按钮相同的 ActionEvent 的代码在哪里?

【问题讨论】:

标签: java swing


【解决方案1】:

首先查看How to Use Root Panes,尤其是JRootPane#setDefaultButton

当您有可能使用 Enter 键的组件(如文本字段)时,您可能需要考虑使用键绑定 API

InputMap im = getInputMap(WHEN_IN_FOCUSED_WINDOW);
ActionMap am = getActionMap();

im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Enter.pressed");
am.put("Enter.pressed", new AbstractAction() {
    @Override
    public void actionPerformed(ActionEvent e) {
        btnSubmit.doClick();
    }
});

现在,差不多现在,我可能会考虑制作一个Action,它同时应用于JButton 和键绑定

查看How to Use Key BindingsHow to Use Actions 了解更多详情

【讨论】:

    【解决方案2】:

    我不知道是否有更正确的挥杆方式,但这应该可以解决问题:

    ActionListener listener = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            //...
        }
    }
    btnSubmit.addActionListener(listener);
    btnEnter.addActionListener(listener);
    

    【讨论】:

    • 按键盘上的 Enter 键输入。不是 Enter JButton。
    • @btrballin 在你的帖子中可能值得一提:)
    • 我的描述好像是 Enter 按钮,但标题是 Enter 键。
    • @btrballin,是的,现在看到了。
    • @btrballin,我没有答案,因为我不熟悉 Swing。虽然我怀疑它看起来很相似。如果你愿意,我可以删除这个答案。
    【解决方案3】:

    一种方法是在提交按钮上使用.doClick() 方法并创建一个KeyAdapter

        KeyAdapter Enter = new KeyAdapter(){
            @Override
            public void keyPressed(KeyEvent e) {
                if(e.getKeyCode() == KeyEvent.VK_ENTER){
                    btnSubmit.doClick();
                }
            }
        };
        txtField1.addKeyListener(Enter);
        txtField2.addKeyListener(Enter);
    

    【讨论】:

    • 因此,除非KeyListener 注册的组件具有焦点,否则KeyListener 将不起作用。作为一般经验法则,您应该避免将KeyListener 与文本组件一起使用。也有更简单更容易的方法来达到相同的结果(而不是必须注册一个KeyListener 到几十个组件)
    猜你喜欢
    • 2018-02-22
    • 2017-01-28
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 2012-02-17
    相关资源
    最近更新 更多