[英]Java JTable TableCellRenderer With ImageIcon Column
我有一个表有自定义表模型,有两列。 第0列是ImageIcon类,第1列是String类。
public Class<?> getColumnClass(int col) {
if (col == 0) {
return ImageIcon.class;
} else {
return String.class;
}
}
当我定义要添加到列的新TableCellRenderer类以便我可以设置单元格样式时,它会覆盖ImageIcon类并将其设置为String。
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类并将其设置为String。
所以问题在于,当我定义这个TableCellRenderer类来设置我的表的样式时,我表中的ImageIcon列转向像“File:...”这样的字符串,而不是实际的图标。
无需创建自定义渲染器。 JTable allready支持包含Icon的列的默认渲染器。 您需要做的就是覆盖您似乎正在执行的getColumnClass()方法。
另一种可能的解决方案是自己设置图标。 我不确定这是否是最佳解决方案,但它有效:
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.