2015-10-15 4 views
0

Я хочу создать средство отображения ячеек JTable, которое сможет распознавать тип данных и использовать соответствующее представление.Универсальный рендеринг ячеек для JTable

Более конкретно, я хочу, чтобы моя таблица могла распознавать, является ли тип данных Collection, и в этом случае использовать JComboBox для представления (в других случаях стандартное представление: JCheckBox для булевых типов и JLabel для других типов и для что я использую метод пользовательской модели getColumnClass())

Я не знаю тип данных заранее, в какой колонке будет Collection или даже есть коллекция вообще, поэтому я не могу использовать стандартный способ из

JComboBox cell renderer TableColumn column = table.getColumnModel().getColumn(1);

или подобное, которые я знаком с.

Пожалуйста, помогите :)

+1

* «Более конкретно, я хочу, чтобы моя таблица могла распознавать, является ли тип данных« Коллекция », и в этом случае использовать JComboBox для представления (в других случаях стандартная re представление: JCheckBox для булевых типов и JLabel для других типов, и для этого я использую метод пользовательской модели 'getColumnClass()') * "- это больше похоже на функциональность TableCellEditor. Цель метода getColumnClass для TableModel - разрешить ему искать рендереры/редакторы из доступного реестра JTable. – MadProgrammer

ответ

0

Вы можете использовать механизм DefaultRendering внутри JTable, повторное использование этого механизма применять для каждой ячейки:

tableView.setDefaultRenderer(TitleViewCell.class, new TitleTableCellRenderer.class()); 
tableView.setDefaultRenderer(DataViewCell.class, new DataTableCellRenderer.class()); 

Здесь вы можете создать подкласс JTable в JTableView, например:

import javax.swing.JTable; 
import javax.swing.table.TableCellRenderer; 
import javax.swing.table.TableModel; 

public class JTableView extends JTable 
{ 
    private static final long serialVersionUID = -1350656893711208356L; 

    public JTableView(TableModel tableModel) 
    { 
     super(tableModel); 
    } 

    public TableCellRenderer getCellRenderer(int row, int column) 
    { 
     Object value = getValueAt(row, column); 
     if (value != null) 
     { 
      return getDefaultRenderer(value.getClass()); 
     } 
     return super.getCellRenderer(row, column); 
    } 
}; 
Смежные вопросы