面板的任何元素的KeyPressed事件

时间:2014-02-08 11:10:05

标签: java swing keylistener enter

所以这是我的代码:

public void keyPressed(KeyEvent ke){
    int keyID = ke.getKeyCode();
    Object o = ke.getSource();

    if (keyID == KeyEvent.VK_ENTER){
        if(o.equals(GUI.btnOK)){
            //Do something
        }
    }}}

好的,这样做是什么//当通过键 ENTER 访问名为JButton的{​​{1}}时,做一些事情。

问题是:当按下主面板的任何元素时,如何将btnOK置于输入触发状态?

它几乎没有,o.equals(GUI.btnOK)就是其中之一。我的主要小组是:

btnOK

我试过了:

pnlMain= new JPanel(null); 

但它似乎没有用,尽管我确实将事件添加到主面板。

示例:

if (keyID == KeyEvent.VK_ENTER){
            if(o.equals(GUI.pnlMain)){
                //Do something
            }
        }

而不是将所有按钮放在if (keyID== KeyEvent.VK_ESCAPE){ if(o.equals(GUI.txtLogin) || o.equals(GUI.pwfPWD) || o.equals(GUI.btnOK)){ //Do this igu.setVisible(false); igu.dispose(); System.exit(0); }} 中的 ESCAPE 触发,我希望它可用(按下退出按钮),无论何时打开程序重点是。

1 个答案:

答案 0 :(得分:3)

可能你正在寻找这样的东西:

//您可以将密钥绑定到JComponent,因此每当您在'JComponent ENTER JComponent`上按it does desired operation say Transfer Focus to next时,就像:

jComponent.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "TransferFocus");
jComponent.getActionMap().put("TransferFocus", action);

//您可以将键绑定到JButton,因此每当您在'JButton ENTER JButton`上按it does desired operation say Click the时,就像:

jButton.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "DoClick");
jButton.getActionMap().put("DoClick", action);

//动作

AbstractAction action = new AbstractAction() {
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() instanceof JButton){
        JButton button = (JButton) e.getSource();
        button.doClick();        
        } else if(e.getSource() instanceof JComponent){
            JComponent component = (JComponent) e.getSource();
            component.transferFocus();
        }
    }
    };