jbutton.doClick()单击按钮但不执行该功能

时间:2009-08-30 23:59:39

标签: java swing mouse

我有一个jbutton,它在鼠标点击时执行一个功能。为了以编程方式执行此操作,我还有其他功能

void clickButton(){
      backButton.doClick();
}

当我运行clickButton()函数时,我可以看到在jFrame上按下了backButton但是没有发生与backButton相关联的函数。当我用鼠标点击它它的功能。我在这做错了什么?

3 个答案:

答案 0 :(得分:5)

如果您ActionListener附加了button,当您调用方法.doClick()时,它就会被触发;

验证它的样本测试:

public class Test implements ActionListener {
    public Test() {
    }

    public void actionPerformed(ActionEvent e) {
        System.out.println("The action have been performed");
    }

    public static void main(String[] agrs) {
        JButton but = new JButton();
        but.addActionListener(new Test());
        but.doClick();
    }
}

答案 1 :(得分:1)

您可以迭代该按钮的侦听器并手动调用它们。

    KeyEventDispatcher keyEventDispatcher = new KeyEventDispatcher() {
          @Override
          public boolean dispatchKeyEvent(final KeyEvent e) {
            if (e.getID() == KeyEvent.KEY_TYPED) {
              System.out.println(e);
              if (e.getKeyChar() == ' '){
                  MouseEvent me = new MouseEvent(btnStop,MouseEvent.MOUSE_CLICKED,EventQueue.getMostRecentEventTime(),0,0,1,1,false);
                  for (MouseListener ml : btnStop.getMouseListeners()) ml.mouseClicked(me);
              }
            }
            // Pass the KeyEvent to the next KeyEventDispatcher in the chain
            return false;
          }
        };
    KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(keyEventDispatcher);
}

答案 2 :(得分:0)

如何将逻辑附加到按钮?如果您使用ActionListener(或Action),则应该触发。如果您正在使用其他东西(也许是MouseListener?),我认为不会。