Coloring particular rows according to the first column values in JTable?

左心房为你撑大大i 提交于 2019-11-28 14:15:50
trashgod

Your renderer is choosing the color based on the row parameter passed to prepareRenderer(). The predicate row % 2 == 0 selects alternating rows for shading, as shown in your picture. Your question implies that you actually want to base shading on the value of column zero, ID. For this you need to examine the result of the getValueAt(row, 0).

The exact formulation depends on your model. Using this example, the following renderer shades rows starting with the letter "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;
    }
};

Addendum: @mKorbel helpfully comments on the need to convert between model and view coordinates when sorting is enabled, as discussed here.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!