根据 JTable 中的第一列值着色特定行?
Posted
技术标签:
【中文标题】根据 JTable 中的第一列值着色特定行?【英文标题】:Coloring particular rows according to the first column values in JTable? 【发布时间】:2012-12-14 02:09:43 【问题描述】:我正在尝试根据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;
;
这是现在的样子:
【问题讨论】:
为了可读性,使用常见的 Java 命名约定;为安全起见,请使用@Override
注释。
【参考方案1】:
您的渲染器正在根据传递给prepareRenderer()
的row
参数选择颜色。谓词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 有助于解决启用排序时在 model 和 view 坐标之间转换的需要,正如 here 所讨论的那样。
【讨论】:
+1 更安全的可能是int modelRow = convertRowIndexToModel(row);
for dataModel.getValueAt
@mKorbel:没错!反过来也适用于SelectionAction
。感谢您的批判性评论;已更新。
谢谢!!这非常有用。
不客气;一段时间后,您可以通过点击左侧的empty check mark 来接受这个答案。以上是关于根据 JTable 中的第一列值着色特定行?的主要内容,如果未能解决你的问题,请参考以下文章
如何根据 Python、R 中不同数据框/患者之间的第一列元素/基因取第二列值/计数的平均值?