Ano*_*non 14 java swing event-handling jbutton actionlistener
如何以编程方式发送ActionEvent(例如按下按钮/ ACTION_PERFORMED)到JButton?
我知道:
button.doClick(0);
Run Code Online (Sandbox Code Playgroud)
和
button.getModel().setArmed(true);
button.getModel().setPressed(true);
button.getModel().setPressed(false);
button.getModel().setArmed(false);
Run Code Online (Sandbox Code Playgroud)
但是不是可以直接发送它ActionEvent吗?
编辑:这不是生产代码,它只是一个小小的个人实验.
jjn*_*guy 15
你可以得到一个按钮ActionListener,然后actionPerformed直接调用该方法.
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);
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 13
即使你可以,你为什么要这样做?通常当人们想要做这样的事情时,这意味着他们没有正确地将 UI 的关注点与业务逻辑分开.通常,他们希望调用ActionListener中发生的某些逻辑,而无需执行操作.
public void actionPerformed(ActionEvent ae) {
//SomeLogic
}
//...
public void someOtherPlace() {
//I want to invoke SomeLogic from here though!
}
Run Code Online (Sandbox Code Playgroud)
但实际上解决方案是从ActionListener中提取该逻辑并从ActionListener和第二个位置调用它:
public void someLogic() {
//SomeLogic
}
public void actionPerformed(ActionEvent ae) {
someLogic();
}
//...
public void someOtherPlace() {
someLogic();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26109 次 |
| 最近记录: |