这个很疯狂:
我有一个客户重现错误的 AppSight 记录(对于那些不熟悉的人,这是他们所做的事情的记录,包括键盘/鼠标输入 + 网络流量等)。基本上,我们在屏幕上列出了一系列项目,左侧是 JCheckBox-es。我们为 JPanel 设置了一个 MouseListener,看起来像这样:
private MouseAdapter createMouseListener() {
return new MouseAdapter(){
public void mousePressed( MouseEvent e ) {
if( e.getComponent() instanceof JCheckBox ) {
// Do stuff
}
}
};
}
根据录音,他们似乎非常强烈地点击了其中一个复选框的上方。在那之后,我相信这个听众被解雇了,“Do stuff” block 发生了。但是,它没有选中该框。然后用户看到该框未选中,因此他们单击了它。这导致“Do stuff” block 再次触发,从而撤消了它第一次所做的事情。这一次,复选框被勾选了。因此,用户认为该框已被选中,而且看起来确实如此,但我们的客户认为该框未被选中,因为它被点击了两次。
这可能吗?对于我的生活,我无法重现它或看到它怎么可能,但根据记录和客户端发送到服务器的数据,我看不出任何其他合乎逻辑的解释。
任何帮助、想法和/或想法将不胜感激。
最佳答案
也许用户点击了复选框,但在释放鼠标按钮之前,他将鼠标从组件上移开。我很确定在这种情况下不会检查复选框,尽管不太确定这种情况下的事件线程行为。
关于java - 没有检查 JCheckBox 就触发了 MouseListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3057677/