我需要在我的 JTree 上显示弹出菜单,我就这样添加了鼠标监听器:
tree.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent me){
if (SwingUtilities.isRightMouseButton(me)){
//.. some code to show popup menu
}
}
});
但有时这个事件只是被跳过:我点击了,但是 mouseClicked()
没有被调用。 JTabbedPane
也会发生同样的情况:我在某些选项卡上单击鼠标右键,有时 mouseClicked()
未被调用,但选项卡实际上已切换。
UPD:大约 10% 的点击会发生这种情况。往往无法忽视它。
顺便说一句,我可以在这样的JTabpedPane
上添加ChangeListener
,这个事件永远不会被跳过,但我也需要处理鼠标,我完全不知道这里可能有什么问题。
感谢任何帮助。
最佳答案
我猜问题在于,在 10% 的点击中,您实际上并不是在点击,而是在开始和完成拖动。这就是 mouseClicked 事件不起作用的原因。
尝试监听 mousePressed 或 mouseReleased MouseAdapter 的事件(取决于您想要的行为)而不是 mouseClicked 事件。
关于java - Swing:有时会跳过 JTree 或其他组件上的鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10247065/