swing中table的渲染爲三種:
1 列頭渲染:
方法:新建一個類 testheaderrender,繼承defaulttablecolrenderer 裏面實現方法getTableCellRendererComponent()方法,
在其他方法中如果有一個新的table組件,在裏面寫上:table.getTableHeader().setDefaultRenderer(new HeaderRenderer());即可實現列頭的渲染。
2 行頭的渲染:
方法:同樣的新建一個類testcolheadrenderer,繼承 defaulttablecolrenderer ,在這個類裏面實現方法 getTableCellRendererComponent();調用的時候,在new 的新的table中不調用,而是在給這個表格添加attribute的時候添加如下語句:
attribute.setRendererClass("cams.alarm_manage.alarmBan.ColHeadRenderer");
3 表中數據的渲染:
方法:直接在你new的新的table後面寫個匿名內部類,實現方法:prepareRenderer返回
components組件,裏面的關鍵代碼:
Component component = super.prepareRenderer(renderer, row, col);
JComponent comp = (JComponent) component;
TTableColumn column = (TTableColumn)
table.getColumnByIndex(col);
下面根據實際的條件,在進行判斷,判斷完以後,返回 component組件;
4.渲染實例:
table = new PersonTable(box){
public void prepareTableHeaderRenderer(JLabel renderer, TTableColumn tableColumn){
renderer.setOpaque(false);//
如果爲 true,則該組件繪製其邊界內的所有像素
renderer.setForeground(Color.white);//
設置此組件的前景色。
renderer.setFont(font);//
設置此組件的字體。
}
public Component prepareRenderer(TableCellRenderer renderer, int row, int col) {
Component component = super.prepareRenderer(renderer, row, col);
if(alternateButton.isSelected()){
setAlternateRowColor(component, row, col);
}else{
setGradientRowColor(component, row, col);
}
Person person = (Person) table.getElementByRowIndex(row);//獲得該行的persona對象
if(person != null && !person.isSelected()){//當前對象不爲空且沒有被選擇
if(person.getAge() == 20 || person.getAge() == 80){
component.setBackground(Color.green);
}
}
return component;
}
public boolean isCellEditable(int row, int col) {
TTableColumn column = this.getColumnByIndex(col);
if(column.getName().equals(TWaverConst.USER_PROPERTY_PREFIX + "MultiLine")){
return true;
}
return super.isCellEditable(row, col);
}
protected JTableHeader createDefaultTableHeader() {
return new JTableHeader(columnModel){
public void paintComponent(Graphics g) {
this.setOpaque(false);
Graphics2D g2 = (Graphics2D)g;
g2.setPaint(new GradientPaint(0, this.getHeight()/4, Color.black, 0, this.getHeight()/7*6, tableHeaderColor, true));
g2.fillRect(0, 0, table.getWidth(), this.getHeight());
super.paintComponent(g);
}
};
}
};