我正在尝试在 EDT 上生成双击鼠标事件,如下所示:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
component.dispatchEvent(new MouseEvent(
component,
MouseEvent.MOUSE_CLICKED,
System.currentTimeMillis(),
InputEvent.BUTTON1_MASK,
x, y,
2, // click count
false
));
}
});
这似乎没有发送双击事件,即使我将点击次数设置为 2。
有什么建议或例子吗?
最佳答案
考虑:
final JButton clickTwiceButton = new JButton();
final JButton fireEventButton = new JButton();
听众:
clickTwiceButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
if (evt.getClickCount() == 2) {
JOptionPane.showMessageDialog(null, "Double clicked!");
}
}
});
fireEventButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
// Invoking later for no reason, just to simulate your code
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
clickTwiceButton.dispatchEvent(new MouseEvent(
fireEventButton,
MouseEvent.MOUSE_CLICKED,
1,
MouseEvent.BUTTON1,
0, 0,
2,
false
));
}
});
}
});
当我单击 fireEventButton
时,MouseEvent
被正确发送到 clickTwiceButton
,并且对话框按预期出现。
因此,正如@Andrew 指出的那样,问题似乎是您将事件触发到错误的组件或者注册的 MouseListener
/MouseAdapter
代码。
使用component.getMouseListeners()检查您的组件监听器并调试处理其事件的代码。
关于java - 在 Java Swing 中生成双击鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9549108/