【问题标题】:Adding an Icon to JTable by overriding DefaultTableCellRenderer通过覆盖 DefaultTableCellRenderer 将图标添加到 JTable
【发布时间】:2010-11-20 11:42:23
【问题描述】:

我正在尝试通过指定我自己的表格单元格渲染器来将图标添加到特定的 JTable 列,如下所示 (based on parts of this tutorial):

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. 单元格 MyTableModel.IMAGE_COLUMN 其中 应该只有一个图标也有 文本。

提前致谢

【问题讨论】:

    标签: java swing jtable


    【解决方案1】:

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

    字体、背景色等也是如此

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

    应该做的伎俩,

    【讨论】:

    • 谢谢,不知道所有表格单元格都重复使用相同的标签。使用上面的代码我仍然得到相同的结果。我已经通过在将表格单元格渲染器转换为 JLabel 后将图标设置为空来解决它。
    • 是的,我的建议没有帮助,因为我忘记了列 == MyTableModel.IMAGE_COLUMN 测试
    猜你喜欢
    • 2021-12-19
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多