Java 改变JTable单元格颜色

Java 改变JTable单元格颜色,java,swing,formatting,rendering,jtable,Java,Swing,Formatting,Rendering,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

这简直让我发疯

我知道,要使用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()
方法中更改格式。

setDefaultRenderer
的第一个参数中,为要覆盖渲染的类放置类文本。也就是说,如果您的数据由所有字符串组成,您可以

myTable.setDefaultRenderer(String.class, new CustomRenderer());
如果您的数据还包含类为
BigDecimal
Integer
的值,则必须针对每个类类型多次调用该方法(
BigDecimal.class
Integer.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();
    }
}

public类这似乎不适合我。我所做的唯一一件事就是调用setDefaultRenderer方法并创建CustomRenderer类。我还需要做些什么来让它工作吗?我是通过使用Object.class而不是String.class来工作的。不过,我不知道为什么需要这样做,因为我所有的数据都是字符串。谢谢你的帮助!不允许我在侦听器中更改渲染器吗?我想在按下按钮时重新格式化表格。您需要使用Object.class,因为您创建了一个JTable w/o传入表格模型。创建的默认表模型为每种列类型返回Object.class。请参阅:TableModel::getColumnClass(int-col)在哪里使用它?假设我现在要在单击表格单元格时更改其颜色?