如何将图像渲染到JTable单元格

我想在我的JTable的单元格上应用渲染器,为此我创建了一个名为myRenderer的类:

import java.awt.Component; import javax.swing.ImageIcon; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; public class MyRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, ImageIcon icon) { setIcon(icon); return this; } } 

我使用这段代码在单元格上应用渲染器:

 MyRenderer renderer = new MyRenderer(); renderer.getTableCellRendererComponent(table, icon); table.getColumnModel().getColumn(6).setCellRenderer(renderer); 

问题是,rebderer应用于第6列中的所有单元格,我希望它仅应用于一个单元格(行/列),但我不知道该怎么做?

提前致谢

除了您甚至没有正确覆盖getTableCellRendererComponent方法之外,您甚至不需要自定义渲染器来在列中显示图像

从如何使用表格 。 以下是具有默认预配置渲染器的类型列表

  • Boolean – 使用复选框呈现。
  • Number – 由右对齐标签呈现。
  • Double, Float – 与Number相同,但是对象到文本的转换由NumberFormat实例执行(使用当前语言环境的默认数字格式)。
  • Date – 由标签呈现,由DateFormat实例执行对象到文本的转换(使用日期和时间的简短样式)。
  • ImageIcon ,Icon – 由居中的标签呈现。
  • Object – 由显示对象字符串值的标签呈现。

所以你可以把一个ImageIcon添加到表中,它将被渲染,因为你正确覆盖了getColumnClass()

同样来自教程:

要选择在列中显示单元格的渲染器,表格首先确定是否为该特定列指定了渲染器。 如果没有,则表调用表模型的getColumnClass方法,该方法获取列单元格的数据类型。 接下来,该表将列的数据类型与已注册单元格渲染器的数据类型列表进行比较

因此,假设您有一个包含三列的DefaultTableModel ,并且您希望在最后一列中使用ImageIcon 。 你会做这样的事情

 DefaultTableModel model = new DefaultTableModel(...) { @Override public Class getColumnClass(int column) { switch (column) { case 2: return ImageIcon.class; default: return String.class } } }; JTable table = new JTable(model); 

然后只需将ImageIcon添加到第三列,它就会被渲染

 String colOneDate = "Data"; String colTwoData = "Data"; ImageIcon colThreeIcon = new ImageIcon(...); model.addRow(new Object[] { colOneData, colTwoData, colThreeIcon }); 

您可能还需要相应地将列宽和高度设置为图像的大小。 为此你可以看到任何这些问题

您可以使用getTableCellRendererComponent函数,如下所述。 要显示图标的图标,行和库存,您可以使用setter方法从外面设置

 import java.awt.Component; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; public class MyRenderer extends DefaultTableCellRenderer { public MyRenderer() { // TODO Auto-generated constructor stub } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); int neededRow=0; // set the needed row here in which the icon to be dispayed int neededcolumn=0; // set the needed column here in which the icon to be dispayed if(row==neededRow && column==neededcolumn) { setIcon(icon); } return this } }