2010-12-01 69 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()方法,你似乎正在這樣做。