2014-08-11 2 views
0

Привет, ребята, у меня есть следующая проблема в моей программе. У меня есть несколько tablecellrenderers, которые применяются столбцом. Проблема в том, что столбец дважды отображается в моей таблице, а cellrenderer не работает, и обе колонки неформатируются. Я также не могу изменить имена столбцов, потому что у моего клиента есть определенное представление о том, как должна выглядеть эта таблица.Как обрабатывать дубликаты столбцов в tablecellrenderer?

Я спросил Google, поиск в стеке, но я не могу найти решение для этого.

Знаете ли вы обходной путь для этого?

Заранее спасибо

Линии, где я применяю 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 получает MAXVALUE этого столбца, который рассчитывается до CellRenderer будут применены. Это значение maxvalue используется для получения цветового диапазона от o до max в цветовой гамме java.

ответ

1

Используйте модель столбца для установки средства визуализации для вашей колонки.

Вместо

tbl_patchstand.getColumn(columnnames[actcol]) 

использования индекса

tbl_patchstand.getColumnModel().getColumn(actcol) 

должен быть уникальным для каждого столбца.
Это должно решить ваши проблемы.

+0

Проблема в том, что, если у меня есть повторяющиеся имена столбцов, cellrenderer не связан правильно. скажем, у меня есть два столбца с именем «2014-08-11», средство отображения ячеек не может отличаться от них. –

+1

@lt_katana не использует имена. использования. Модель столбца может получить столбец по его индексу, а не только по имени. См. Мой пример. –

+0

У меня был узел в голове. Индекс Работал для меня спасибо. –

Смежные вопросы