大家好,我的程序中有以下问题。 我有几个tablecellrenderers由列应用。 问题是如果列在我的表中出现两次,则cellrenderer将无法工作,并且两列都未格式化。 我也无法更改列名,因为我的客户对此表的外观有一个具体的了解
我问谷歌,stackoverflow搜索,但我找不到任何解决方案。
您知道解决方法吗?
提前致谢
我应用cellrenderer的行
for(int i=0;i<(columnnames.length-anz_col);i++){
//Berechnung einmalig durchführen
actcol=i+anz_col;
//CellFormater
tbl_patchstand.getColumn(columnnames[actcol]).setCellRenderer(new PatchstandCellRenderer(tbl_patchstand.getDefaultRenderer(Object.class), actcol, maxfpatches[i]));
tbl_patchstand.getColumn(columnnames[actcol]).setCellRenderer(new PatchstandCellRenderer(tbl_patchstand.getDefaultRenderer(Double.class), actcol, maxfpatches[i]));
tbl_patchstand.getColumn(columnnames[actcol]).setCellRenderer(new PatchstandCellRenderer(tbl_patchstand.getDefaultRenderer(Integer.class), actcol, maxfpatches[i]));
}
Cellrenderer本身:
public class PatchstandCellRenderer extends DefaultTableCellRenderer {
/**
*
*/
private int maxval,col;
private double oldval,newval;
public PatchstandCellRenderer(TableCellRenderer cellRenderer, int col, int maxval) {
super();
this.maxval=maxval;
this.col=col;
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if((column==col) && value!=null && (!((String)value).trim().equals("-")) && (!((String)value).trim().equals(""))){
//Umrechnen Wert auf Range
oldval=Double.parseDouble((String) value);
newval=(oldval)/(maxval);
c.setBackground(GetColor.getColor(newval));
}
else
c.setBackground(Color.WHITE);
return c;
}
}
Cellrenderer获取此列的最大值,该值在应用cellrenderer之前计算。 此maxvalue用于在java色调配色方案中获得从o到max的颜色范围。
答案 0 :(得分:1)
使用列模型为列设置渲染器。
而不是
tbl_patchstand.getColumn(columnnames[actcol])
使用
tbl_patchstand.getColumnModel().getColumn(actcol)
每列的索引必须是唯一的。
这应该可以解决你的问题。