1. 程式人生 > >JTable設定表頭背景色

JTable設定表頭背景色

今天發現一個新問題:當設定表頭的背景色的時候,顏色沒有完全填充到表頭當中,如下圖所示:

這裡寫圖片描述

程式碼:

table.getTableHeader().setBackground(new Color(51, 102, 255));

該程式碼的效果如上所示。

想要的效果是:
這裡寫圖片描述

首先設定表頭的高度:

Dimension size = table.getTableHeader().getPreferredSize();
size.height = 32;//設定新的表頭高度32
table.getTableHeader().setPreferredSize(size);

設定表格表頭背景色和表頭內容居中:

/**
 * 
 * @param table
 *            表格
 * @param columnIndex
 *            要設定的列下標
 * @param c
 *            顏色
 */
public static void setTableHeaderColor(JTable table, int columnIndex, Color c) {
    TableColumn column = table.getTableHeader().getColumnModel().getColumn(columnIndex);
    DefaultTableCellRenderer cellRenderer = new
DefaultTableCellRenderer() { /** serialVersionUID */ private static final long serialVersionUID = 43279841267L; @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { setHorizontalAlignment(JLabel.CENTER); ((DefaultTableCellRenderer) table.getTableHeader().getDefaultRenderer()) .setHorizontalAlignment(DefaultTableCellRenderer.CENTER);// 表頭內容居中
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); } }; cellRenderer.setBackground(c); column.setHeaderRenderer(cellRenderer); }

最終的效果:

這裡寫圖片描述

完整程式碼:

/**
 * 設計表格的樣式類
 * @author 
 *
 */
public class TableStyleUI {
    public static void makeFace(JTable table) {
        DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(){
            /**serialVersionUID*/
            private static final long serialVersionUID = 1234579841267L;

            @Override
            public Component getTableCellRendererComponent(JTable table,
                    Object value, boolean isSelected,boolean hasFocus,
                    int row, int column) {
                if(row%2==0){
                    setBackground(new Color(202,241,245));
                }else{
                    setBackground(new Color(255,255,255));
                }

                setHorizontalAlignment(JLabel.CENTER);// 表格內容居中
                ((DefaultTableCellRenderer) table.getTableHeader().getDefaultRenderer())
                .setHorizontalAlignment(DefaultTableCellRenderer.CENTER);// 列頭內容居中
                 table.getTableHeader().setFont(new Font("微軟雅黑", Font.PLAIN, 13));
                 table.getTableHeader().setResizingAllowed(true);
                 table.setRowHeight(26);//設定行高

                return super.getTableCellRendererComponent(table, value, 
                        isSelected, hasFocus, row, column);
            }
        };

        Dimension size = table.getTableHeader().getPreferredSize();
        size.height = 32;//設定新的表頭高度32
        table.getTableHeader().setPreferredSize(size);

        for (int i = 0; i < table.getColumnCount(); i++) {
            TableColumn col = table.getColumn(
                    table.getColumnName(i));
            col.setCellRenderer(renderer);
            setTableHeaderColor(table,i,new Color(51, 102, 255));
        }

        TableStyleUI.setTableHeaderColor(table,0,Color.RED);//把表頭的第1列設為紅色
        TableStyleUI.setTableHeaderColor(table,1,Color.YELLOW);//把表頭的第2列設為黃色
        TableStyleUI.setTableHeaderColor(table,2,Color.GREEN);//把表頭的第3列設為綠色 
        TableStyleUI.setTableHeaderColor(table,3,Color.ORANGE);//把表頭的第4列設為橙色
    }

    /**
     * 該方法主要實現了表格中表頭的背景色的設計,表頭內容的居中效果
     * 
     * @param table
     *            表格
     * @param columnIndex
     *            要設定的列下標
     * @param c
     *            顏色
     */
    public static void setTableHeaderColor(JTable table, int columnIndex, Color c) {
        TableColumn column = table.getTableHeader().getColumnModel()
                .getColumn(columnIndex);
        DefaultTableCellRenderer cellRenderer = new DefaultTableCellRenderer() {
            /** serialVersionUID */
            private static final long serialVersionUID = 43279841267L;

            @Override
            public Component getTableCellRendererComponent(JTable table, 
                    Object value, boolean isSelected,boolean hasFocus,
                    int row, int column) {

                setHorizontalAlignment(JLabel.CENTER);// 表格內容居中
                ((DefaultTableCellRenderer) table.getTableHeader().getDefaultRenderer())
                        .setHorizontalAlignment(DefaultTableCellRenderer.CENTER);// 列頭內容居中

                return super.getTableCellRendererComponent(table, value, 
                        isSelected, hasFocus, row, column);
            }
        };
        cellRenderer.setBackground(c);
        column.setHeaderRenderer(cellRenderer);
    }
}