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);
}
};
}
};