根据JTable中的第一列值着色特定行?

时间:2012-12-28 21:06:42

标签: java swing jtable tablecellrenderer

我正在尝试根据JTable中的第一列值为特定行着色,但下面的代码根据行的索引对行进行着色。我的表只有四列。第一列有ID号。我需要根据这些ID号对行进行着色。例如,如果第一个ID为0而第二个ID也为0,则它​​们都应为“lightGray”。请问有什么想法吗?

table_1 = new JTable(){
    public Component prepareRenderer(TableCellRenderer renderer,int Index_row, int Index_col) {
        Component comp = super.prepareRenderer(renderer,Index_row, Index_col);
            //even index, selected or not selected
            if (Index_row % 2==0  &&  !isCellSelected(Index_row, Index_col)) {
                comp.setBackground(Color.lightGray);
            } else {
                comp.setBackground(Color.white);
            }
            return comp;
        }
    };

以下是现在的样子:

How it should look like

1 个答案:

答案 0 :(得分:6)

您的渲染器根据传递给row的{​​{1}}参数选择颜色。谓词prepareRenderer()选择交替行进行着色,如图所示。您的问题意味着您实际上希望将阴影基于第0列的值row % 2 == 0。为此,您需要检查ID

的结果

确切的配方取决于您的型号。使用此example,以下渲染器将以字母“T”开头的行进行着色。

getValueAt(row, 0)

image

附录:@mKorbel帮助评论在启用排序时需要在模型视图坐标之间进行转换,如here所述。