2

我正在尝试根据 中的第一列值为特定行着色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;
        }
    };

这是它现在的样子:

它应该是什么样子

4

1 回答 1

6

您的渲染器正在根据row传递给prepareRenderer(). 谓词row % 2 == 0选择交替行进行着色,如图所示。您的问题意味着您实际上希望将底纹基于零列的值,ID. 为此,您需要检查getValueAt(row, 0).

确切的公式取决于您的模型。使用此示例,以下渲染器对以字母“T”开头的行进行着色。

private JTable table = new JTable(dataModel) {

    @Override
    public Component prepareRenderer(TableCellRenderer renderer, int row, int col) {
        Component comp = super.prepareRenderer(renderer, row, col);
        int modelRow = convertRowIndexToModel(row);
        if (((String) dataModel.getValueAt(modelRow, 0)).startsWith("T")
            && !isCellSelected(row, col)) {
            comp.setBackground(Color.lightGray);
        } else {
            comp.setBackground(Color.white);
        }
        return comp;
    }
};

图片

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

于 2012-12-29T00:47:12.153 回答