繁体   English   中英

JAVA:将图像放入jTable Cell

[英]JAVA: Put Image in jTable Cell

我需要在一个jTable单元格中显示图像。
我写了这个:

class ImageRenderer extends DefaultTableCellRenderer {
    JLabel lbl = new JLabel();

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
        boolean hasFocus, int row, int column) {
        lbl.setText((String) value);
        lbl.setIcon(new ImageIcon("/home/ariyan/Desktop/71290452.jpg"));
        return lbl;
    }
}

然后用它作为:

    jTable1.getColumn(0).setCellRenderer(new ImageRenderer());

但这没效果
我怎么能这样做?

谢谢

JTable已经为图像提供了默认渲染器。 您只需要告诉表格每列中包含哪种类型的数据,它将选择最佳渲染器:

a)覆盖JTable的getColumnClass()方法或TableModel以返回列中的数据类。 在这种情况下,您应该返回一个Icon.class。

b)将ImageIcon添加到表模型中。

现在,JTable将使用该列的默认Icon渲染器。

嗯: jTable1.getColumnModel().getColumn(0).setCellRenderer(new ImageRenderer()); 也许?

这是我汇总的一些快速测试代码的相关摘录,以便快速验证我的猜测。 它显示文件夹中的图标(它假定文件夹中的所有文件都是图标,因此您应该使用类似XDG图标主题子目录的方法进行测试)。 首先安装表模型,然后在列上添加单元格渲染器:

class Renderer extends DefaultTableCellRenderer {

    @Override
    public Component getTableCellRendererComponent (JTable table,
                                                    Object value,
                                                    boolean isSelected,
                                                    boolean hasFocus,
                                                    int row, int column) {
        if(isSelected) {
            this.setBackground(table.getSelectionBackground());
            this.setForeground(table.getSelectionForeground());
        }
        else {
            this.setBackground(table.getBackground());
            this.setForeground(table.getForeground());
        }
        if(column == 0) {
            this.setText(list[row]);
        }
        else {
            // edit as appropriate for your icon theme
            this.setIcon(new ImageIcon("/usr/share/icons/default.kde4/16x16/apps/"+list[row]));
        }
        return this;
    }

}
class Model extends DefaultTableModel {

    @Override
    public boolean isCellEditable (int row, int column) {
        return false;
    }

    @Override
    public Object getValueAt (int row, int column) {
        return list[row];
    }

    @Override
    public int getRowCount () {
        return list.length;
    }

    @Override
    public int getColumnCount () {
        return 2;
    }

    @Override
    public String getColumnName (int column) {
        return column == 0? "Name" : "Preview";
    }

    @Override
    public Class<?> getColumnClass (int columnIndex) {
        return String.class;
    }
}
// edit base directory as appropriate for your icon theme of choice
static String[] list=new File("/usr/share/icons/default.kde4/16x16/apps/").list();

暂无
暂无

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

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