如何在tablecellrenderer中处理重复的列标题?

时间:2014-08-11 14:10:58

标签: java swing jtable tablecellrenderer

大家好,我的程序中有以下问题。 我有几个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的颜色范围。

1 个答案:

答案 0 :(得分:1)

使用列模型为列设置渲染器。

而不是

tbl_patchstand.getColumn(columnnames[actcol])

使用

tbl_patchstand.getColumnModel().getColumn(actcol)

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

相关问题