2009-05-03 195 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