根据 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 有助于解决启用排序时在 modelview 坐标之间转换的需要,正如 here 所讨论的那样。

【讨论】:

+1 更安全的可能是int modelRow = convertRowIndexToModel(row); for dataModel.getValueAt @mKorbel:没错!反过来也适用于SelectionAction。感谢您的批判性评论;已更新。 谢谢!!这非常有用。 不客气;一段时间后,您可以通过点击左侧的empty check mark 来接受这个答案。

以上是关于根据 JTable 中的第一列值着色特定行?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据原始文件的第一列值组织新文件?

jtable的某一列的列宽怎么设置?

根据另一列值禁用jqgrid中的超链接

如何根据 Python、R 中不同数据框/患者之间的第一列元素/基因取第二列值/计数的平均值?

c#如何获取datagridview中的第一列的值,注意不是选中行

如何在for和if循环中获取spark scala数据帧的最后一行的第一列值