JAVA:将图像放入jTable单元格
问题描述:
我需要在jTable单元格之一中显示图像。
我写了这个:JAVA:将图像放入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());
但这并没有工作
我怎么能这样做?
谢谢
答
嗯: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();
答
JTable已经为图像提供了默认渲染器。您只需告诉表格中每列包含的数据类型,它将选择最佳的渲染器:
a)覆盖JTable的getColumnClass()方法或TableModel以返回柱。在这种情况下,你应该返回一个Icon.class。 b)将一个ImageIcon添加到表格模型中。
现在,JTable将为该列使用默认的图标渲染器。
渲染器应尽可能高效。每次渲染器被调用时,您都不应该从磁盘读取映像。此外,在扩展默认渲染器时,您应该调用super.getTableCellRendererComponent(...)。这将确保渲染器完全初始化,例如通过添加适当的边框以及设置默认的着色。 – camickr 2010-07-11 14:10:08
当然不是。但嘿,我发布了这个概念,原型代码。不是一个真正的工作投入解决方案! – user268396 2010-07-11 16:04:32