繁体   English   中英

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

[英]How to add image to JTable cell?

我有一个在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;
        }
    }

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

您应该重新实现TableCellRenderer尝试阅读简短文章

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

  • 准备Icon/ImageIcon作为局部变量,因为Renderer在每个Mouse or Key events上都会重新创建这些Objects ,因此在疯狂时期会有很多事件

this.fireTableDataChanged();

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

  • 在这种情况下,(仅向TableModel添加一行)关于fireTableRowsInserted()

如何获得显示正确图像的信息?

  • 如我所见,您在其中添加了新行,然后将Icon / ImageIcon直接添加到TableModel ,不再进行转换,无需声明,没有问题,JTable已在API中实现了Icon / ImageIcon

  • 如果没有从Mouse or Key events更改Icon / ImageIcon请不要使用Renderer

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM