我遇到了以下问题,无法找到我做错的事情。我的问题是替换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类派生的类时可以正常工作。
有什么建议吗?
答案 0 :(得分:2)
fireTableChanged(null);
不要调用上面的代码。 <{1}}的工作是根据需要调用该方法。
在您的情况下,它会导致问题,因为TableModel
将重新创建JTable
,这将重置表格的默认渲染器和编辑器。