JLabel 或 JTable 单元格上的 ActionListener

Posted

技术标签:

【中文标题】JLabel 或 JTable 单元格上的 ActionListener【英文标题】:ActionListener on JLabel or JTable cell 【发布时间】:2010-11-25 13:44:57 【问题描述】:

我有一个以JLabel[][] 作为数据的 JTable。现在我想检测对 JLabel 或表格单元格的双击(但仅在其中一列中)。如何分别在 JLabel 表格单元格上添加 Action/MouseListener?

【问题讨论】:

JLabels 没有 ActionListener,但有 MouseListener,添加它们并在 mouseClick 上监听 【参考方案1】:

怎么样:

table.addMouseListener(new MouseAdapter() 
  public void mouseClicked(MouseEvent e) 
    if (e.getClickCount() == 2) 
      JTable target = (JTable)e.getSource();
      int row = target.getSelectedRow();
      int column = target.getSelectedColumn();
      // do some action if appropriate column
    
  
);

【讨论】:

如果我在表格单元格中有那个 Jlabel,那么我将如何在点击时调用该点击事件? 如下@Camickr评论,我认为最好使用MousePressed方法而不是MouseClick【参考方案2】:

基本上与已经接受的建议相同,除了:

a) 你应该处理 mousePressed,而不是 mouseClicked。只有在同一像素位置生成 mousePressed 和 mouseReleased 事件时才会触发 mouseClicked 事件。如果用户在双击时将鼠标移动甚至 1 个像素,您将不会获得预期的双击。

b) 您也可以考虑使用 columnAtPoint() 和 rowAtPoint() 方法来获取点击的单元格。尽管在这种情况下可能没有什么不同,但如果您尝试使用 MouseListener 进行鼠标右键单击,这将很重要,因为选择不会改变。所以如果你养成了使用这种方法的习惯,以后就不会有问题了。

【讨论】:

以上是关于JLabel 或 JTable 单元格上的 ActionListener的主要内容,如果未能解决你的问题,请参考以下文章

什么是JTable的任何单元格中的更改的正确事件?

处理 UICollectionView 单元格上的滑动:在 UICollectionView 或每个单元格上实现处理程序?

Qtablewidget 中单元格上的 MouseMove 事件以显示或打印消息

在 Java 中双击 JTable 上的侦听器

在 Firefox 中不显示边框,表格上的边框折叠,位置:tbody 上的相对或单元格上的背景颜色

集合视图单元格上的重叠阴影