2015-09-03 4 views
0

Мой код довольно длинный, поэтому я делаю краткий пример моей проблемы.Java - JTable Custom TableCellRenderer + Reordering Allowed

У меня есть JTable с 2 столбцами, содержащими номера. Мне нужен один столбец, скажем, столбец B для визуализации по-разному. Вот почему я создал клиента TableCellRenderer, который преобразует число в JPanel (несколько значков, текст и т. Д.). Я устанавливаю класс столбца B в JPanel и колонке А к номеру при создании JTable:

table = new JTable(model) 
    { 
     public Class getColumnClass(int column) 
     { 
      if(column == 1) 
      { 
       return Number.class; 
      } 

      if(column == 2) 
      { 
       return JPanel.class; 
      } 

      return super.getColumnClass(column); 

     } 
    } 

    table.setDefaultRenderer(JPanel.class, (TableCellRenderer) new RendererCurrency()); 

    DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer(); 
    centerRenderer.setHorizontalAlignment(JLabel.CENTER); 

    table.setDefaultRenderer(Number.class , centerRenderer); 

Все работает отлично до сих пор, обе колонки показывают правильное значение и получить оказывается правильным. Проблема начинается, когда я хочу, чтобы Reordering Allowed = true.

Как только вы переключитесь столбцы в запущенном ПО колонны и ее значения будут коммутируемыми ...

но не визуализатор

Это приводит к колонку A оказанных и колонки B, чтобы быть стандартным, где он должен быть наоборот.

Это, вероятно, потому, что я установил класс для определенного индекса столбца, но я не знаю, как еще я должен это делать.

+1

использовать методы 'table.convertColumnIndexToModel()' и 'table.convertColumnIndexToView()', чтобы получить правильный columnindex. – Manu

ответ

1

Благодаря @Manu я был в состоянии решить эту проблему путем преобразования индекса столбца в целях:

 public Class getColumnClass(int column) 
     { 
      if(column == table.convertColumnIndexToView(1)) 
      { 
       return Number.class; 
      } 

      if(column == table.convertColumnIndexToView(2)) 
      { 
       return JPanel.class; 
      } 

      return super.getColumnClass(column); 

     }