我在 JTable 中有一个列,它应该显示两种类型:字符串或 ImageIcon,而不是两者。该列中的每个单元格都有自己的线程来计算数据。一开始我给每个单元格放置一个图像(如等待徽标),然后用一串计算数据替换(不附加)图像。我试图扩展默认的 TableCell 渲染器,但它显示像对象地址(javax.swing.ImageIcon@342...)这样的图像,然后用字符串替换。另一种变体,它正确显示图像,但用空字符串替换它(或者它不可见?)。
如何设置它以便表格根据类型正确显示单元格内容?
这是我目前所拥有的:
class IconAndStringRenderer extends DefaultTableCellRenderer {
private static final long serialVersionUID = 3606788739290618405L;
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
if (value instanceof Icon) {
setIcon((Icon) value);
setText("");
}
return this;
}
}
这是JTable:
表 = 新 JTable(模型){
private static final long serialVersionUID = 8058795799817761161L;
public Class<?> getColumnClass(int column) {
if (column == TARGET_COLUMN)
return ImageIcon.class;
else
return super.getColumnClass(column);
}
};
还有几个问题:
如何设置它以使文本替换图像,而不是在图像之后写入文本(即使它不可见);
如何设置文本颜色,我将使用 setForebackground(Color c),但如果我使用它,图像不会显示。
是否可以使其与 Jlabel 一起使用?在修改单元格的线程中设置所需的 Jlabel(带有图像或文本),只需 setValueAt(label, row, column);