2009-05-03 212 views
7

這使我絕對瘋了。更改JTable單元格顏色

我知道,要改變JTable表格格的格式,我必須使用自己的渲染器。但我似乎無法正確實施。

這是我的當前設置:

public class MyClass 
{ 
    public static void main(String args[]) 
    { 
     JTable myTable = new JTable(10, 10); 
     myTable.setDefaultRenderer ([I dont know what to put here], new CustomRenderer()); 
    } 
} 

class CustomRenderer extends DefaultTableCellRenderer 
{ 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    { 
     Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 

     // Formatting 
     return c; 
    } 
} 

什麼我需要使用的setDefaultRenderer第一個參數? API只是說'班'。我不知道該放什麼。

難道有人會用最簡單的方式解釋我如何去實現它?請提供一個示例,說明如何從main()方法中更改格式。

回答

13

setDefaultRenderer的第一個參數中,將類文字用於您想要重寫呈現的類。也就是說,如果你的數據包括所有字符串的,你可以把

myTable.setDefaultRenderer(String.class, new CustomRenderer()); 

如果您的數據還包括與BigDecimalInteger如類值,你必須調用該方法多次爲每個類類型(BigDecimal.classInteger.class在每種情況下)。

最後,要改變你在渲染這樣做的背景色:

class CustomRenderer extends DefaultTableCellRenderer 
{ 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
    { 
     Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
     c.setBackground(new java.awt.Color(255, 72, 72)); 
     return c; 
    } 
} 

如果你寫一個渲染器應該所有的接口類的工作,你還需要修改您表模型getColumnClass功能,讓它迴歸接口類實現這個接口的所有對象:

public Class<? extends Object> getColumnClass(int c) { 
    Object object = getValueAt(0, c); 
    if(object == null) { 
     return Object.class; 
    if(getValueAt(0, c) instanceof IColorable) { 
     return ICarPart.class; 
    } else { 
     return getValueAt(0, c).getClass(); 
    } 
} 

無線可以爲IColorable.class註冊渲染器,並且不需要爲每個實現註冊單獨的渲染器。

+0

這似乎並不適用於我。我唯一做的就是調用setDefaultRenderer方法並創建CustomRenderer類。還有什麼我需要做的,以使這個工作? – 2009-05-03 23:41:54