java - 通过覆盖 DefaultTableCellRenderer 将图标添加到 JTable

标签 java swing jtable

我正在尝试通过指定我自己的表格单元格渲染器向特定的 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 其中 应该只有一个图标也有 文本。

提前致谢

最佳答案

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

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

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

应该可以,

关于java - 通过覆盖 DefaultTableCellRenderer 将图标添加到 JTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1291948/

相关文章:

java - 在 weblogic 应用服务器中使用 Coherence Cache 实现 Oracle DCN

java - FileReaders readLine 返回总是 null JAVA

java - 在 jtable 中呈现字符串和日期数据类型

java - 二维网格中对象的碰撞处理

java - 使用 PowerMock 模拟私有(private)方法

java - 以编程方式滚动

java - 如何将我的 TopComponent 用作 JFrame?

java - 当 SQL 进行排序时,如何启用 GUI 行为来对 JTable 进行排序?

java - JTable 在自动刷新方案上插入数据

java - JTable 将行值存储为对象