使用 JTable TableCellRenderers 设置单元格选中时的背景和前景时,有一个常用方法。这是一个被问到的示例问题:
为什么我的 Java 自定义单元格渲染器在选择行/单元格时不显示突出显示?
该解决方案缺少一件事……单元格周围的边界。(请注意,我不是在询问行周围的边框,正如这里所问的那样。)当单元格被选中时,边框应该突出显示。只创建自己的边框并设置它是不可接受的,因为您创建的边框可能不适合外观。
我已经通过初始化默认渲染器成功获得了边框,然后为它的边框清除它,如下所示:
private final DefaultTableCellRenderer defTblRend = new DefaultTableCellRenderer();
private final JComponent renderer = new ComplexCell(); // Whatever object type extends JComponent
@Override public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column)
{
// ... Set values on "renderer" object here ...
renderer.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
renderer.setForeground(isSelected ? table.getSelectionForeground() : table.getForeground());
renderer.setOpaque(!renderer.getBackground().equals(table.getBackground()));
JComponent comp = (JComponent)defTblRend.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
renderer.setBorder(comp.getBorder());
return renderer;
}
有没有更好的办法?