如何将图像添加到JTable单元格?

时间:2012-06-07 11:36:19

标签: java image swing jtable imageicon

我有一个在Netbeans的设计模式下创建的JTable。在我的代码中,我选择在启动时放置以下代码行:

model = new TableModel();
tbShares.setAutoCreateColumnsFromModel(false);
tbShares.setModel(model);

tbShares是我的JTable对象。

包含我的JTable的JFrame如下所示:

share manager

第一列设置为Object类型(另外两个是字符串),因此它可以显示图像。我有这个代码,我输入它来加载图像,但它不起作用(list.add部分,其余部分是为了让您深入了解我的代码的结构)。这是AbstractTableModel

的扩展
public void addRegister(String status, String name, String clients){
        ImageIcon activeStatus = new ImageIcon(CleanSheets.class.getResource("res/img/active.png"));
        ImageIcon inactiveStatus = new ImageIcon(CleanSheets.class.getResource("res/img/inactive.png"));
        list.add(new Register((status.equals("true") ? activeStatus : inactiveStatus), name, clients));
        this.fireTableDataChanged();
    }

    class Register{
        Object status;
        String name;
        String clients;

        public Register(Object status, String name, String clients) {
            this.status = status;
            this.name = name;
            this.clients = clients;
        }
    }

据说,它从我指示的文件夹中抓取图像,但它只是输出该列中的文本而不是实际图像。如何让它显示正确的图像?谢谢。

2 个答案:

答案 0 :(得分:2)

您应该重新实施TableCellRenderer尝试阅读this短篇文章

答案 1 :(得分:1)

  

ImageIcon activeStatus = new ImageIcon(CleanSheets.class.getResource(“res / img / active.png”));           ImageIcon inactiveStatus = new ImageIcon(CleanSheets.class.getResource(“res / img / inactive.png”));

  • 准备Icon/ImageIcon作为本地变量,因为Renderer在每个Objects上重新创建这些Mouse or Key events,在疯狂时期有一堆事件
  

this.fireTableDataChanged();

  • 是添加/删除整个JTable条件的正确通知程序,对于TableCell,有fireTableCellXxx()

  • 在此上下文中(仅向TableModel添加一行)关于fireTableRowsInserted()

  

如何让它显示正确的图像?

  • 我在那里添加了一个新行,然后直接将Icon / ImageIcon添加到TableModel,不再需要转换,声明必需,没有问题,JTable已实现{{1}在API中

  • 如果Icon / ImageIcon未更改Icon / ImageIcon

  • ,请勿使用渲染器