2015-10-15 142 views
0

我想製作一個JTable單元格渲染器,它將能夠識別數據類型並使用適當的表示形式。JTable的通用單元格渲染器

更具體一點,我希望我的表能夠識別數據類型是否爲集合,並且在這種情況下使用JComboBox進行表示(在其他情況下爲標準表示形式:JCheckBox用於布爾類型和JLabel用於其他類型和用於我正在使用自定義模型的方法getColumnClass()

我不知道事先的數據類型,在哪個列將被收集,甚至是會有收集,所以我不能使用標準的方式的

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

或類似的,我很熟悉用。

請幫助:)

+1

*「更具體地說,我希望我的表能夠識別數據類型是否爲集合,並且在這種情況下使用JComboBox進行表示(在其他情況下,標準表示ation:JCheckBox用於布爾類型,JLabel用於其他類型,爲此我使用自定義模型的方法'getColumnClass()')*「 - 這聽起來更像TableCellEditor的功能。 TableModel的getColumnClass方法的目的是允許它從JTable的可用註冊表中查找渲染器/編輯器。 – MadProgrammer

回答

0

您可以使用內部JTable中DefaultRendering機制,再利用這一機制適用於每個細胞:

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); 
    } 
};