JTable設定表頭背景色
阿新 • • 發佈:2019-02-15
今天發現一個新問題:當設定表頭的背景色的時候,顏色沒有完全填充到表頭當中,如下圖所示:
程式碼:
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);
}
}