我在Java Swing应用程序中有一个自定义的JButton。
它会根据鼠标事件更改其外观。
MouseEvent.MOUSE_ENTERED-将触发按钮的悬停图像。 MouseEvent.MOUSE_PRESSED-将触发按下的图像。
MouseEvent.MOUSE_RELEASED-将前景更改为灰色并使按钮处于禁用状态。
实际单击鼠标可以正常工作。
我要添加对按ENTER键的支持。
仅仅调用button.doClick()
并没有经过悬停新闻发布周期,而是跳转到了发布事件。
因此,我有一个简短而有效的代码来执行此操作。
InputMap im = workspacePnl.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
ActionMap am = workspacePnl.getActionMap();
im.put(KeyStroke.getKeyStroke("ENTER"), "connect");
am.put("connect", new ConectAction());
private class ConectAction extends AbstractAction {
@Override
public void actionPerformed(ActionEvent ev) {
simulateClick();
}
和有问题的代码:
public void simulateClick() {
MouseEvent evt;
evt = new MouseEvent(connectBtn,
MouseEvent.MOUSE_ENTERED, 1, 0, 0, 0, 1, false);
connectBtn.dispatchEvent((AWTEvent) evt);
//CommonUtil.sleep(300);
evt = new MouseEvent(connectBtn,
MouseEvent.MOUSE_PRESSED, 8, 0, 0, 0, 1, false);
connectBtn.dispatchEvent((AWTEvent) evt);
//CommonUtil.sleep(300);
evt = new MouseEvent(connectBtn,
MouseEvent.MOUSE_RELEASED, 20, 0, 0, 0, 1, false);
connectBtn.dispatchEvent((AWTEvent) evt);
}
我试图使ENTER按相同的路径进行操作:触发MOUSE_ENTERED事件,该事件将更改按钮的悬停外观,其次是MOUSE_PRESSED和MOUSE_RELEASED。
但是我只看到最后一个事件的效果。好像我只是在触发最后一个事件,这缺乏交互式软件的生动性。
我尝试(可以看到已注释掉)让线程在每次事件触发后进入睡眠状态,但是它没有任何作用。
如果我尝试触发其他两个事件中的每一个,则它们自己会在屏幕上引起注意。是批处理使事情变得混乱。
我如何才能一一触发一系列的dispatchEvent,这些事件都会被用户注意到?我如何让程序等待当前的dispatchEvent工作正常,然后再继续下一步?
任何帮助或见解将不胜感激。
最佳答案
我如何才能逐一触发一系列的dispatchEvents
被用户注意到了吗?我如何使程序等待当前
在继续下一步之前,dispatchEvent可以正常工作吗?
鼠标和按键事件已在ButtonComponents中正确实现,请不要使用MouseListener来通过ButtonModel将ChangeListener中的事件用于example