表單元格渲染器的使用
使用表格渲染器渲染表格
在使用JTable時,用戶往往希望改變它缺省的渲染方式,比如使用間隔色的行,對特定的單元格進行特殊顏色顯示等,這對一些可視化編程環境的表格並不是一件容易的事。
在Java Swing編程中我們可以使用DefaultTableCellRenderer的子類渲染表格來達到這個目的,實現和使用它都非常容易。
渲染效果一:
步驟一:實現一個javax.swing.table.DefaultTableCellRenderer的子類
/**
* 間隔色表格渲染類
*/
public class ColorTableCellRenderer extends DefaultTableCellRenderer {
private static final long serialVersionUID = -3378036327580475639L;
public Component getTableCellRendererComponent(
JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
// 得到單元格
Component cell =
super.getTableCellRendererComponent(
table,
value,
isSelected,
hasFocus,
row,
column);
// 進行渲染
if (hasFocus) {
// 如果獲得焦點則設置背景色爲紅色
cell.setBackground(Color.red);
//cell.setForeground(Color.black);
} else {
if ((row % 2) == 0) {
// 偶數行設置爲白色
cell.setBackground(Color.white);
} else {
// 奇數行設置爲藍色
cell.setBackground(Color.cyan);
}
}
return cell;
}
}
步驟二:將ColorTableCellRenderer設置爲表格的渲染器
try {
ColorTableCellRenderer cellRender = new ColorTableCellRenderer();
table.setDefaultRenderer(Class.forName("java.lang.Object"),
cellRender);
} catch (Exception e) {
e.printStackTrace();
}
實現一個將特定單元格設置爲紅色的表格渲染器
如右,如果想將成員年齡大於37的單元格設置爲紅色。
AgeTableCellRenderer的代碼
public class AgeTableCellRenderer extends DefaultTableCellRenderer {
private static final long serialVersionUID = -334535475639L;
public Component getTableCellRendererComponent(
JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
// 得到單元格
Component cell =
super.getTableCellRendererComponent(
table,
value,
isSelected,
hasFocus,
row,
column);
// 先把所有單元格設置爲白色
cell.setBackground(Color.white);
// 進行渲染
if (table.getColumnName(column).equals("年齡") ) { // 如果列名等於“年齡”
// 取得單元格的文字
String strValue=(String)value;
if(Pattern.matches("//d+", strValue)){
if(Integer.parseInt(strValue)>37){
// 如果是數字且值大於37,將單元格背景設置爲紅色
cell.setBackground(Color.red);
}
}
}
return cell;
}
}