JAVA:将图像放入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()); 也许?

以下是我汇总的一些快速测试代码的相关摘录,以便快速validation我的猜测。 它显示文件夹中的图标(它假定文件夹中的所有文件都是图标,因此您应该使用类似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();