Java 根据JTable中的第一列值为特定行着色?
我试图根据Java 根据JTable中的第一列值为特定行着色?,java,swing,jtable,tablecellrenderer,Java,Swing,Jtable,Tablecellrenderer,我试图根据JTable)中的第一列值对特定行进行颜色,但下面的代码根据行的索引对行进行颜色。我的表只有四列。第一列有ID号。我需要根据这些ID号给行上色。例如,如果第一个ID为0,第二个ID也为0,则两者都应为“浅灰色”。有什么想法吗 table_1 = new JTable(){ public Component prepareRenderer(TableCellRenderer renderer,int Index_row, int Index_col) { Comp
JTable
)中的第一列值对特定行进行颜色,但下面的代码根据行的索引对行进行颜色。我的表只有四列。第一列有ID号。我需要根据这些ID号给行上色。例如,如果第一个ID为0,第二个ID也为0,则两者都应为“浅灰色”。有什么想法吗
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()
的行
参数选择颜色。谓词行%2==0
选择交替行进行着色,如图所示。您的问题意味着您实际上希望以列0的值为底色,ID
。为此,您需要检查getValueAt(行,0)
的结果
精确的公式取决于您的模型。使用此选项,以下渲染器对以字母“T”开头的行进行着色
附录:@mKorbel对启用排序时需要在模型坐标和视图坐标之间进行转换提出了有益的意见,如前所述。为了便于阅读,请使用常见的Java命名约定;为安全起见,请使用
@Override
注释。+1更安全可能是int modelRow=convertRowIndexToModel(row)对于dataModel.getValueAt
@mKorbel:没错!反之则适用于选择操作
。感谢您的批评性评论;更新。谢谢!!那太有用了,不客气;一段时间后,您可以通过单击左侧的来接受此答案。
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;
}
};