标签或表格单元格的ActionListener

25

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


JLabel没有ActionListener,但有MouseListener,添加它们并监听mouseClick事件。 - Telcontar
3个回答

68

怎么样:

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,那么我如何在单击时调用该单击事件? - Kishan Bheemajiyani
1
根据@Camickr的评论,我认为最好使用MousePressed方法而不是MouseClick。 - Alter Hu

28

与已经接受的相同建议,但:

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

b) 另外,您可能需要考虑使用columnAtPoint()和rowAtPoint()方法来获取单元格单击位置。虽然在这种情况下可能没有区别,但如果你尝试使用MouseListener进行右键点击,这将很重要,因为选择不会改变。因此,如果养成使用此方法的习惯,您将来就不会遇到问题了。


0

如@camickr在选项b中所说,您应该使用columnAtPoint(),否则当单击单元格之外但在表格内部时,您可能会得到意外的行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接