0

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

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

tbShares是我的 JTable 对象。

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

分享经理

第一列被设置为一个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;
        }
    }

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

4

2 回答 2

2

您应该重新实现TableCellRenderer尝试阅读这篇短文

于 2012-06-07T11:43:33.337 回答
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重新创建这些,在疯狂时期有一堆事件ObjectsMouse or Key events

this.fireTableDataChanged();

  • 是添加/删除整个内容的正确通知者JTable,对于 TableCell 有fireTableCellXxx()

  • 在这种情况下是(只添加一行TableModel)关于fireTableRowsInserted()

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

  • 如我所见,您添加一个新行,然后直接添加Icon / ImageIconTableModel无需更多转换,声明需要,没问题,JTable已Icon / ImageIcon在API中实现

  • Icon / ImageIcon如果没有更改表单,请不要使用渲染器Mouse or Key events

于 2012-06-07T11:59:12.143 回答