更改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只是说’class’。 我不知道该放什么。

有人可以用最简单的术语解释我如何实现这个目标吗? 请提供一个示例,说明如何在main()方法中更改格式。

setDefaultRenderer的第一个参数中,为要覆盖渲染的Class放置类文字 。 即,如果您的数据包含所有字符串,您可以放置

 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 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注册渲染器,并且不需要为每个实现注册单独的渲染器。