我正在尝试将隐藏列的数据显示为工具提示。使用以下代码隐藏正常工作:
JTable table = new JTable(model){
//Implement table cell tool tips.
public String getToolTipText(MouseEvent e) {
String tip = null;
java.awt.Point p = e.getPoint();
int rowIndex = rowAtPoint(p);
int colIndex = columnAtPoint(p);
int realColumnIndex = convertColumnIndexToModel(colIndex);
try {
tip = getValueAt(rowIndex, 8).toString();
} catch (RuntimeException e1) {
//catch null pointer exception if mouse is over an empty line
}
return tip;
}
};
TableColumnModel tcm = table.getColumnModel();
TableColumn tc;
for(int i = 1; i <= 7; i++){
tc = tcm.getColumn(8);
tcm.removeColumn(tc);
}
但是工具提示没有显示隐藏列的数据(getValue函数没有返回值)。那么隐藏列也会删除数据吗?
答案 0 :(得分:5)
i
变量; - ) JTable
上的removeColumn
不会从模型中删除数据,如javadoc中明确说明的那样
从此JTable的列数组中删除aColumn。注意:此方法不会从模型中删除数据列;它只是删除了负责显示它的TableColumn。
javadoc中没有提及TableColumnModel
上的相同方法,但我认为它的工作方式相同,但您可以尝试在JTable
上调用它。而不是
代码中的真正问题是使用getValueAt
,它使用表的行和列索引,而不是模型
注意:列在表视图的显示顺序中指定,而不是在TableModel的列顺序中指定。这是一个重要的区别,因为当用户重新排列表中的列时,视图中给定索引处的列将发生更改。同时,用户的操作决不会影响模型的列排序。