根据JTable中的第一列值着色特定行?
我正在尝试根据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; } };
以下是它现在的样子:
您的渲染器根据传递给prepareRenderer()
的row
参数选择颜色。 谓词row % 2 == 0
选择交替行进行着色,如图所示。 您的问题意味着您实际上希望以第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帮助评论在启用排序时需要在模型和视图坐标之间进行转换,如此处所述。