问题描述
正如您从图像中看到的,我在框架中有我的 jtable,有两个列名称和图标。图标列不突出显示。为什么?这是我的渲染器。我的图标是一个带有绿色矩形的 JComponent 对象
public class myRenderer extends JPanel implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int col)
{
if (hasFocus)
setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
else
setBorder(null);
return (Component) value;
}
};
解决方法
TableCellRenderer
的文档:
hasFocus - 如果 true
,适当地渲染单元格。比如给单元格加一个特殊的边框,如果单元格可以编辑,就用表示编辑的颜色渲染
可能图标列不可编辑和/或单元格没有焦点。
(使用调试器或 println
查看 hasFocus
是否为真)
我的图标是一个带有绿色矩形的 JComponent 对象
TableModel
不应将组件存储为数据。模型应该存储数据,然后渲染数据。
如果要显示矩形,请向模型添加自定义 Icon
。有关自定义图标的示例,请参阅:https://stackoverflow.com/a/32700526/131872
然后在您的 JTable
或 TableModel
中,您重写 getColumnClass(...)
方法以返回 Icon.class
作为第二列,表格将使用默认图标渲染器。请参阅:https://stackoverflow.com/a/5615516/131872
如果您确实需要自定义渲染器,那么您应该从默认渲染器扩展,因为它会自动提供对突出显示和关注行和单元格的支持。
如果您实现了 TableCellRenderer,那么您负责根据传递给方法的参数在渲染器中突出显示和聚焦绘制。