我有JTable
并希望允许通过单击表的空白部分来取消选择所有行。迄今为止,这工作得很好。然而,即使我打电话table.clearSelection();
表仍显示先前启用的小区周围的边框(请参阅细胞中的例子):JTable:在清除行选择时清除单元格周围的边框
我想摆脱这个边界,以及(它看起来特别不适合Mac的原生外观和感觉,细胞突然变黑)。
完全正常的小例子代码:
public class JTableDeselect extends JFrame {
public JTableDeselect() {
Object rowData[][] = { { "1", "2", "3" }, { "4", "5", "6" } };
Object columnNames[] = { "One", "Two", "Three" };
JTable table = new JTable(rowData, columnNames);
table.setFillsViewportHeight(true);
table.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
if (table.rowAtPoint(e.getPoint()) == -1) {
table.clearSelection();
}
}
});
add(new JScrollPane(table));
setSize(300, 150);
}
public static void main(String args[]) throws Exception {
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
new JTableDeselect().setVisible(true);
}
}
[编辑]尝试添加这是在这里提到table.getColumnModel().getSelectionModel().clearSelection();
。但是这也没有帮助。
谢谢!简单而有效! – qqilihq
@qqilihq,这假定表中的所有数据使用相同的渲染器。对于更一般的解决方案,除了清除选择之外,还需要重置选择模型的锚/索引索引。那么你不需要自定义渲染器。 – camickr
@camickr:谢谢你。 1+给你的答案 –