大家好,我的程式中有以下问题。
我有几个按列应用的tablecellrenderer。
问题是,如果一列在我的表中出现两次,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之前计算的。
此最大值用于获取Java色调配色方案中从o到最大的颜色范围。
最佳答案
使用列模型为列设置渲染器。
代替
tbl_patchstand.getColumn(columnnames[actcol])
采用
tbl_patchstand.getColumnModel().getColumn(actcol)
每一列的索引必须唯一。这应该可以解决您的问题。