Jtable cellEditor 集不适用于我的 Table 模型定义

Jtable cellEditor set doesn't work with my Table Model definition

我被以下问题困住了,找不到我做错了什么。我的问题是替换 JTable 单元格的默认编辑器并改用 ComboBox。我的代码似乎工作正常,但没有产生预期的效果。经过深思熟虑,并验证 Oracle 在他们的教程中提出的解决方案有效后,我决定简化我的 JTable 代码,删除我自己的 table 模型并保留默认模型,令人惊讶的是它工作得很好。

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

是什么让我的 class TableController?

基本上连接到依赖项 table 并将其与 JTable 组件链接。这是一个扩展了 AbstractTableModel class 的 Class,这里是建立控制模型的地方。所有这部分工作正常,添加、删除和更新 table 的已建立字段,但我必须坚持使用默认编辑器。对于其他逻辑字段,复选框已设置,但对于其他所有人,我不能使用 JComboBox 或 JFormattedTextField 组件,甚至不能限制字符的引入,这在不使用从 AbstractTableModel class 派生的 class 时确实有效.

有什么建议吗?

fireTableChanged(null);

不要调用上面的代码。根据需要调用该方法是 TableModel 的工作。

在您的情况下,它会导致问题,因为 JTable 将重新创建 TableColumnModel,这将重置 table.

的默认渲染器和编辑器