为什么我的组件列没有突出显示?

问题描述

myFrame

正如您从图像中看到的,我在框架中有我的 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

然后在您的 JTableTableModel 中,您重写 getColumnClass(...) 方法以返回 Icon.class 作为第二列,表格将使用默认图标渲染器。请参阅:https://stackoverflow.com/a/5615516/131872

如果您确实需要自定义渲染器,那么您应该从默认渲染器扩展,因为它会自动提供对突出显示和关注行和单元格的支持。

如果您实现了 TableCellRenderer,那么您负责根据传递给方法的参数在渲染器中突出显示和聚焦绘制。