如何使Enter键和Submit按钮具有相同的ActionEvent?

时间:2016-02-09 03:22:14

标签: java swing

所以我有一个提交按钮,其中ActionEvent包含大约50行代码。当检测到按下Enter键时,如何为“{1}}”提供与ActionEvent完全相同的JFrame?这就是我的提交按钮的ActionEvent看起来像

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

为提交JFrame提供与提交按钮相同的ActionEvent的代码是什么以及在哪里?

3 个答案:

答案 0 :(得分:3)

首先查看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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

执行此操作的一种方法是在“提交”按钮上使用.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);