Jtable cellEditor set不适用于我的表模型定义

时间:2015-01-28 14:17:36

标签: java swing jtable abstracttablemodel

我遇到了以下问题,无法找到我做错的事情。我的问题是替换JTable的单元格的默认编辑器,而是使用ComboBox。我的代码似乎正常工作,但不会产生预期的效果。经过深思熟虑后,在验证了Oracle在他们的教程中提出的解决方案之后,我决定减轻我的JTable代码,删除我自己的表模型并保留默认模型,令人惊讶的是它完美无缺。

private void establecerColumna() {
    //Cuando este sea deba ser distinto del que se establece por defecto.
    JComboBox c = new JComboBox();
    c.addItem("0000");
    c.addItem("1111");
    c.addItem("2222");
    tblCuentas.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(c));
}

此代码块可与任何类型的单元格编辑器完美配合,不仅适用于ComboBox。

但是当我使用自己的Class来控制de JTable时,情况会发生变化。

private void establecerModeloTabla() {
    String[] colTitles = {"Nº Orden", "Entidad", "Sucursal", "DC", "Cuenta", "Iban", "Bic", "Activa"};
    String[] colFields = {"IdCuenta", "Entidad", "Oficina", "Dc", "Cuenta", "Iban", "Bic", "Activa"};
    TableController modelo ;
    modelo= new TableController(new EmpresaCuentas(emp.getConexion()));
    tblCuentas.setModel(modelo);
    modelo.setColumnFields(colFields);
    modelo.setColumNames(colTitles);
    //Establecemos el componente de edicion que me interesa para cada campo de la tabla
    //Cuando este sea deba ser distinto del que se establece por defecto.
    JComboBox c = new JComboBox();
    c.addItem("0000");
    c.addItem("1111");
    c.addItem("2222");
    modelo.setCellEditor(tblCuentas.getColumnModel().getColumn(1), c, "test title");
}

setCellEditor方法是下一个:

public void setCellEditor(TableColumn tc, JComboBox colType,String toolTipText){
    tc.setCellEditor(new DefaultCellEditor(colType));
    // establecemos el renderer del campo.
    if (toolTipText!=null && toolTipText.length()>0){
        DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
        renderer.setToolTipText(toolTipText);
        tc.setCellRenderer(renderer);
    }      
    fireTableChanged(null);
} 

是什么让我的TableController成为了什么?

基本上连接到从属表并将其与JTable组件链接。这是一个扩展AbstractTableModel类的类,并且存在控件模型的建立位置。所有这一部分都正常工作,添加,删除和更新表的已建立字段,但我必须坚持使用默认编辑器。对于其他逻辑字段复选框已设置,但对于其他所有人,我不能使用JComboBox或JFormattedTextField组件,甚至限制字符的引入,这在不使用从AbstractTableModel类派生的类时可以正常工作。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

fireTableChanged(null);

不要调用上面的代码。 <{1}}的工作是根据需要调用该方法。

在您的情况下,它会导致问题,因为TableModel将重新创建JTable,这将重置表格的默认渲染器和编辑器。