大家好,我的程式中有以下问题。
我有几个按列应用的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)


每一列的索引必须唯一。这应该可以解决您的问题。

10-05 21:52