设置JTable每行的颜色

时间:2023-02-04 21:36:09

简单,实用,详细。争取一篇能用。

首先,JTable自身是没有提供方法改变每一行的前景色和背景色的。
所以必须自己动手:

/** * 简单封装一下方法 * @param table 表格 * @param color 颜色列表 */
public static void setColor(JTable table,Color[] color) {
        try {
            DefaultTableCellRenderer dtcr = new DefaultTableCellRenderer() {
            //重写getTableCellRendererComponent 方法
            @Override
            public Component getTableCellRendererComponent(JTable table,Object value, boolean isSelected, boolean hasFocus,int row, int column) {
            //##################### 这里是你需要看需求修改的部分
            setBackground(color[row]);
            setForeground(Color.WHITE);
            //######################
            return super.getTableCellRendererComponent(table, value,isSelected, hasFocus, row, column);
            }
            };
            //对每行的每一个单元格
            int columnCount = table.getColumnCount();
            for (int i = 0; i < columnCount; i++) {
                table.getColumn(table.getColumnName(i)).setCellRenderer(dtcr);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Java会自动调用getTableCellRendererComponent(JTable table, Object value, boolean isSelected, oolean hasFocus,int row, int column)对每一个单元格进行渲染,可以认为这在的for循环中。

用法,直接复制在一个类里面,直接调用。

Class Test{
    DefaultTableModel dtm=new DefaultTableModel(data,title);
    JTable table=new JTable(dtm);
    Color[] color={Color.White,Color.RED,/*等等*/};
    setColor(table,color);
}