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

时间:2009-08-18 05:22:23

标签: java swing jtable

我正在尝试通过指定我自己的表格单元格渲染器(based on parts of this tutorial)来向特定的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;
    }
}

以上代码有效:

  1. 所有单元格都有图标而不是 我想要指定的特定一个 if语句
  2. Cell MyTableModel.IMAGE_COLUMN 应该只有一个图标也有 文本。
  3. 提前致谢

1 个答案:

答案 0 :(得分:4)

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

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

 if(icon == null){
                    label.setText(status);
                    label.setIcon(null);
            }else{  
                    label.setText("");
                    label.setIcon(icon);
            }

应该做的伎俩,