【发布时间】:2015-03-11 21:58:02
【问题描述】:
在我的 Java Swing 应用程序中,我有一个 JList,当我双击列表中的一个项目时,它总是先点击计数 == 1,然后点击计数 == 2,为什么?
list.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
if (SwingUtilities.isLeftMouseButton(e))
{
if (e.getClickCount()==1) Out("Left-ClickCount()==1");
else if (e.getClickCount()==2) Out("Left-ClickCount()==2");
}
else if (SwingUtilities.isRightMouseButton(e))
{
if (e.getClickCount()==2) Out("Right-ClickCount()==2");
else if (e.getClickCount()==1) Out("Right-ClickCount()==1");
}
}
});
无论我点击多快,我故意把“if (e.getClickCount()==2)”放在“else if (e.getClickCount()==1)”之前,它仍然先捕获ClickCount==1 ?为什么 ?如何解决?
【问题讨论】:
-
这就是它的工作方式。通常第一次单击是选择要处理的行,双击是对该行执行一些操作。这不是 Java 的事情。这是标准的应用程序设计,也就是说,双击应该只对第一次选择的项目起作用。快速单击鼠标每次只会增加单击次数。它不会等到您停止单击后再确定是单击、双击还是三次单击。
-
@camickr 这也是 JList 的事情。其他组件不会像那样吃鼠标点击。如果您将 JList 单元格禁用为不可编辑,则双击将按 OP 的预期工作。
-
@AdriaanKoster,这不是 JList 特定的。 JList 不可编辑。我想你的意思是JTable。在任何情况下,JTable 的工作方式都与 JList 相同。如果表格不可编辑,您可以继续点击,点击次数将不断增加。不同之处在于,当表格可编辑时,您只能单击和双击,然后调用编辑器,因此以后的点击将在编辑器上,而不是在表格上。关键是在双击之前您总是会单击一次,这是应该的方式。
-
如果是这样,如何设计我的应用程序,以便单击鼠标右键播放 mp3 文件,但双击鼠标右键打开 mp3 文件进行编辑?
-
看看您系统上的音乐播放器。我通常看到的标准设计是单击(或键盘上的上/下键)将选择一首歌曲。然后双击(或使用键盘上的 Enter)将播放歌曲。不要忘记适当的 GUI 设计应该允许您使用鼠标或键盘。然后进行编辑,您将使用右键单击弹出该歌曲的选项菜单。
标签: java swing jlist click-counting