java:如何只选择jtable中的一个单元格而不是整行

时间:2011-06-23 08:22:04

标签: java swing rendering jtable row

在jTable中,我希望当用户点击一个单元格时,这句话就会打印在屏幕上:

I am cell in row X and column Y

其中x和Y是单击单元格的行和列。 但我得到的是:当我点击第1行和第4列中的单元格时 我得到以下内容:

I am cell in row 1 and column 0
I am cell in row 1 and column 1
I am cell in row 1 and column 2
....
I am cell in row 1 and column N  ( N = number of columns)

即。选择整行。

这是代码:

public class CustomTableCellRenderer extends DefaultTableCellRenderer{

public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{

    Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

            if(isSelected) System.out.println("I am cell in row "+row+" and column "+column);



    return cell;

}

}

感谢您的帮助。

5 个答案:

答案 0 :(得分:15)

您不应该使用单元格渲染器。

在表格上启用单元格选择(使用setCellSelectionEnabled(true)),然后获取表格的选择模型(使用getSelectionModel()),并在此选择模型上添加侦听器。每次触发事件时,使用getSelectedRow()getSelectedColumn()来了解选择了哪个单元格。

请注意,这将为您提供所选单元格,可以使用鼠标或键盘进行修改。如果您只想知道鼠标点击的位置,请参阅KDM的答案。

答案 1 :(得分:6)

myTable.setRowSelectionAllowed(false);

答案 2 :(得分:1)

CellRenderers用于渲染单元格内容。如果要查找鼠标单击的单元格,请使用MouseListener,并在mouseClicked方法中找到单元格。

答案 3 :(得分:0)

将您的if(isSelected)更改为if (isSelected && hasFocus)。这将仅打印选定的单元格,而不是选定的行。

mKorbel的回答也应该有效......

答案 4 :(得分:0)

myTable.setCellSelectionEnabled(真);