java - 更改 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() 方法中更改格式。

最佳答案

setDefaultRenderer 的第一个参数中,为要覆盖呈现的 Class 放置 class literal。即,如果您的数据包含所有字符串,则可以放置

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

如果您的数据还包含以 BigDecimalInteger 作为类的值,则必须为每种类类型(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;
    }
}

如果您编写的渲染器应该适用于接口(interface)的所有类,您还需要修改表模型的getColumnClass 函数 并让它返回所有实现该接口(interface)的对象的接口(interface)类:

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

https://stackoverflow.com/questions/818287/

相关文章:

java - 在字符串模板电子邮件中格式化日期

python - 在python 3中将表情符号转换为Unicode,反之亦然

javascript - 如何使用变量名实现字符串格式化程序

C# 格式化年龄 - 关于天、周、月 - 年

c# - 格式化字母数字字符串

emacs - 在 LaTeX 模式 emacs 中缩进 C 代码区域

javascript - 在Javascript中使链接可点击?

python - 在没有空格或换行符的python中打印变量

sql - 在 Oracle 中将时差转换为给定格式

formatting - Gnuplot 平滑置信区间线而不是误差线