我试图根据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;
        }
    };


这是现在的样子:

最佳答案

渲染器正在根据传递给rowprepareRenderer()参数选择颜色。谓词row % 2 == 0选择交替的行进行着色,如图所示。您的问题意味着您实际上希望将阴影设为第零列的值ID。为此,您需要检查getValueAt(row, 0)的结果。

确切的公式取决于您的模型。使用此example,以下渲染器将以字母“ 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有助于评论启用排序时在模型坐标和视图坐标之间进行转换的必要性,如here所述。

10-05 23:36