通过重写 DefaultTableCellRenderer 将图标添加到 JTable

n00*_*13f 4 java swing jtable

我试图通过指定我自己的表格单元格渲染器来将图标添加到特定的 JTable 列,如下所示(基于本教程的部分内容):

public class MyTableCellRenderer extends DefaultTableCellRenderer {

    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {

        JLabel label = (JLabel)super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

        if(column == MyTableModel.IMAGE_COLUMN){
            String status = (String)value;
            Icon icon = StatusImageUtil.getStatusIcon(status);

            if(icon == null){
                label.setText(status);
            }else{
                label.setIcon(icon);
            }
        }
        return label;
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码可以工作,但是:

  1. 所有单元格都有图标,而不是我想要在 if 语句中指定的特定图标
  2. 单元格 MyTableModel.IMAGE_COLUMN 应该只有一个图标,也有文本。

提前致谢

Pet*_*ter 5

出于更好的性能原因,JTable 为其呈现的每个单元重复使用相同的标签。这意味着每次更改时都需要设置文本和图标。

字体、背景颜色等也是如此

 if(icon == null){
                    label.setText(status);
                    label.setIcon(null);
            }else{  
                    label.setText("");
                    label.setIcon(icon);
            }
Run Code Online (Sandbox Code Playgroud)

应该做到这一点,