我有一个带有自定义表模型的表,该表模型有两列。列0是ImageIcon类,第1列是字符串类。
public Class<?> getColumnClass(int col) {
if (col == 0) {
return ImageIcon.class;
} else {
return String.class;
}
}当我定义要添加到列中的新TableCellRenderer类以便对单元格进行样式设置时,它会覆盖ImageIcon类并将其设置为字符串。
public class CustomTableCellRenderer extends DefaultTableCellRenderer
{
public Component getTableCellRendererComponent (JTable table, Object obj, boolean isSelected, boolean hasFocus, int row, int
column)
{
Component cell = super.getTableCellRendererComponent(table,
obj, isSelected, hasFocus, row, column);
if(isSelected)
cell.setBackground(Color.BLUE);
return cell;
}
}有什么办法解决这个问题吗?
我的错误,有点隐藏:
在定义要添加到列中的新TableCellRenderer类以便对单元格进行样式设置时,它覆盖ImageIcon类并将其设置为字符串。
所以问题是,当我定义这个TableCellRenderer类来为我的表设置样式时,我表中的ImageIcon列会变成String,比如“File:.”而不是真正的图标。
发布于 2010-12-01 16:31:57
不需要创建自定义呈现程序。JTable准备就绪支持包含图标的列的默认呈现程序。您所需要做的就是覆盖getColumnClass()方法,您似乎正在这样做。
发布于 2010-12-01 08:49:46
另一个可能的解决方案是自己设置图标。我不确定这是否是最好的解决方案,但它有效:
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row,
column);
((JLabel)cell).setIcon((Icon)value);
((JLabel)cell).setText("");
((JLabel)cell).setHorizontalAlignment(JLabel.CENTER);
if (isSelected) {
cell.setBackground(Color.blue);
} else {
cell.setBackground(null);
}
return cell;
}https://stackoverflow.com/questions/4321943
复制相似问题