【发布时间】:2012-12-30 11:35:19
【问题描述】:
我有一个 JTable,我想在双击单元格时调用一个函数,并在三次单击单元格时调用另一个函数。
当单元格被三次单击时,我不想调用双击函数。
我现在拥有的是(mgrdAlarm 是 JTable):
mgrdAlarm.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
System.out.println("getClickCount() = " + e.getClickCount());
if (e.getClickCount()==2)
{
doubleClick();
System.out.println("Completed : doubleClick()");
}
if (e.getClickCount()==3)
{
tripleClick();
System.out.println("Completed : tripleClick()");
}
}
});
双击控制台显示:
getClickCount() = 1
getClickCount() = 2
Completed : doubleClick()
三次点击控制台显示:
getClickCount() = 1
getClickCount() = 2
Completed : doubleClick()
getClickCount() = 3
Completed : tripleClick()
三次单击时,我希望控制台显示:
getClickCount() = 1
getClickCount() = 2
getClickCount() = 3
Completed : tripleClick()
所以我不想在双击单元格时调用函数 doubleClick(),但我确实想在双击单元格时调用函数 doubleClick()。
[编辑]
正如所有回复所暗示的那样,解决方案似乎是延迟双击动作并等待一定时间进行三次单击。
但正如here 所讨论的那样,这可能会导致不同类型的问题: 用户可能将他的双击时间设置得很长,这可能与我的三次单击超时重叠。
如果我的双击操作在我的三次单击操作之前执行,这并不是真正的灾难,但它确实会产生一些额外的开销,尤其是一些我想阻止的额外数据流量。
由于目前唯一的解决方案可能会导致其他问题,这实际上可能比原来的问题更糟糕,所以我将保持原样。
【问题讨论】:
-
嗯...延迟执行?
-
一个相当有趣的话题,但解决起来并不(那么)简单。您可能想开始阅读 stackoverflow.com/questions/1067464/… 。单击和双击提供了相同的问题。您需要在代码中实现一些时间跟踪。
-
如何实现自定义 EventQueue 并在此处检测一次、两次或三次点击?
-
@KMaertens 感谢您的回答。这似乎是要走的路,但在阅读了另一个主题后,我认为这可能会导致额外的问题。查看我对帖子的编辑。
-
@LadislavDANKO 抱歉,我还没有 Java 方面的经验。你到底是什么意思,我该怎么做?
标签: java swing mouseevent double-click