2010-12-01 41 views
1

我有一个包含两列的自定义表模型的表。列0是一个ImageIcon类,列1是一个String类。Java JTable带有ImageIcon的TableCellRenderer列

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列“文件:......”,而不是实际的图标。

+0

我很抱歉,但似乎你没有问过这个问题。你刚刚解释了你在做什么。请解释这个问题。怎么了?什么不行? – AlexR 2010-12-01 07:39:08

+0

你确定它是你所看到的渲染器而不是编辑器吗?这种数字显示是针对所有单元格发生的,还是仅针对具有焦点并正在编辑的单元格?如果是后者,你可能需要摆弄单元格编辑器。 – 2010-12-01 07:45:50

回答

1

另一个可能的解决方案是自己设置图标。我不知道这是否是最好的解决办法,但它的工作原理:

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; 
    } 
3

没有必要创建一个自定义渲染器。 JTable allready支持包含Icon的列的默认渲染器。你所需要做的就是覆盖getColumnClass()方法,你似乎正在这样做。