2014-11-10 3 views
0

Я хочу реализовать JTable в моей программе, которая имеет тип mulitple разных строк.JTable с различными типами строк

Вот пример:

enter image description here

Так в основном costs рассчитываются так:

Sale * Production * Production % = Costs

То, что я совершенно не уверен, что: Как дать каждой строки в JTable модель нового «типа» столбца. В настоящий момент я использую такую ​​модель JTable:

public Object getValueAt(int row, int col) { 
     Customer cd = customerList.get(row); 
     switch (col) { 
     case 0: 
      return cd.getName(); 
     case 1: 
      return cd.getAge(); 
     case 2: 
      return cd.getPhone(); 
     default: 
      break; 
     } 

     return null; 
    } 

Любые рекомендации по реализации этого прецедента?

Я ценю ваш ответ!

+1

Что вы подразумеваете под «типом столбца»? Другой тип данных? Разная семантика? – Thomas

+1

Вопрос неясен: «Как дать каждой строке в модели JTable новый« тип »столбца». Что означает выделение строки для столбца? – DSquare

+0

TableCellRenderer/Editor имеет параметр для int columnIndex и int rowIndex, используйте эти оба кодекса – mKorbel

ответ

1

Если вы хотите, чтобы ячейки в строке имели специальное форматирование или тип данных, просто выполните то, что вы сделали для Customer, и просто переключите столбец и строку, то есть я предполагаю, что одна запись в вашей таблице представлена ​​одним столбцом.

Таким образом, просто сделать что-то вроде этого:

Report report = reports.get(col - 1); //made those names up but you should get the idea 
switch (row) { 
    ... 
    case 5: 
    double p = report.getPercentage(); //assuming 10% is stored as 0.1 
    return String.format("%.0f%%", p * 100); //%.0f means a floating point number with 0 fraction digits 
    ... 
} 

В качестве альтернативы (. Особ, если ваша модель должна быть более гибкой, или вы просто кучу значений, например, в виде 2D массива) хранить тип (т.е. как отображать значение) на карте с индексом строки, столбца или ячейки (строки и столбца) в качестве ключа.

Update:

Как сказал mKorbel в комментарии, вы бы лучше пусть визуализатор сделать форматирование. Проблема, однако, в том, что вы не можете просто зарегистрировать рендерер на строку, поэтому вам придется придумать другое решение.

Два из них прямо сейчас поп в моей голове:

  1. Подкласс JTable для переопределения getCellRenderer(row, col) для того, чтобы обеспечить PercentageCellRenderer для строки, которая нуждается в ней. Вам нужно будет настроить, какую строку, например. в таблице.

  2. Предоставить стандартный рендеринг ячеек, который проверяет строку и столбец в getTableCellRendererComponent() и соответственно применяет форматирование.

+0

'return String.format ("%. 0f %% ", p * 100);' ???, 'getValueAt' используется для' TableCellRenderer', не проще переопределить 'getColumnClass' с' Double.Class' и для форматирования 'Double' в' pct form' in путем переопределения 'XxxRenderer', я должен был бы удалить этот ответ как *** – mKorbel

+0

без SSCCE/MCVE - это все о кадрах в темноте – mKorbel

+0

@mKorbel хорошо, задав класс столбца к «Double.class» может быть недостаточно, поскольку fe 'cost' может потребоваться другое форматирование. Вы правы, однако, позволяя рендерингу делать форматирование, но поскольку ОП, похоже, путают даже простые вещи, которые я пытался дать как можно более простой ответ, который мог возникнуть в то время. – Thomas

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