我有一个JTable,其中数据是JLabel[][]
。现在我想检测对JLabel或表格单元格(但仅限于其中一列)的双击。如何在JLabel或表格单元格上添加Action/MouseListener?
我有一个JTable,其中数据是JLabel[][]
。现在我想检测对JLabel或表格单元格(但仅限于其中一列)的双击。如何在JLabel或表格单元格上添加Action/MouseListener?
怎么样:
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
}
}
});
与已经接受的相同建议,但:
a) 您应该处理mousePressed而不是mouseClicked。只有在生成鼠标按下和鼠标释放事件时在同一像素位置才会触发mouseClicked事件。因此,如果用户在双击时移动鼠标1个像素甚至更多,您将无法获得预期的双击。
b) 另外,您可能需要考虑使用columnAtPoint()和rowAtPoint()方法来获取单元格单击位置。虽然在这种情况下可能没有区别,但如果你尝试使用MouseListener进行右键点击,这将很重要,因为选择不会改变。因此,如果养成使用此方法的习惯,您将来就不会遇到问题了。
如@camickr在选项b中所说,您应该使用columnAtPoint(),否则当单击单元格之外但在表格内部时,您可能会得到意外的行为。