如何以编程方式将 ActionEvent 发送到 JButton?

如何以编程方式将(例如按钮按下/ACTION_PERFORMED)发送到?ActionEventJButton

我知道:

button.doClick(0);

button.getModel().setArmed(true);
button.getModel().setPressed(true);
button.getModel().setPressed(false);
button.getModel().setArmed(false);

但是,难道不能直接向它发送一个吗?ActionEvent

编辑:这不是生产代码,只是一个小小的个人实验。


答案 1

您可以获取一个按钮,然后直接调用该方法。ActionListeneractionPerformed

ActionEvent event;
long when;

when  = System.currentTimeMillis();
event = new ActionEvent(button, ActionEvent.ACTION_PERFORMED, "Anything", when, 0);

for (ActionListener listener : button.getActionListeners()) {
    listener.actionPerformed(event);
}

答案 2

即使可以,你为什么要这样做?通常,当人们想要做这样的事情时,这意味着他们没有正确地将UI的关注点与业务逻辑分开。通常,他们希望调用操作列表程序中发生的某些逻辑,而无需执行操作。

public void actionPerformed(ActionEvent ae) {
    //SomeLogic
}

//...

public void someOtherPlace() {
    //I want to invoke SomeLogic from here though!
}

但实际上的解决方案是从 ActionListener 中提取该逻辑,并从 ActionListener 和第二个位置调用它:

public void someLogic() {
    //SomeLogic
}

public void actionPerformed(ActionEvent ae) {
    someLogic();
}

//...

public void someOtherPlace() {
    someLogic();
}

推荐