Pregunta

Cuando selecciono una fila en una JTable, mi JTable ya no se actualiza. Cuando no selecciono una fila, el siguiente código funciona como se esperaba. Se agrega una fila a la JTable.

    @Override
public void update (Observable arg0, Object arg1)
{
    if (arg0 instanceof Logger)
    {
        LogItem last = systemController.logController.getLog().getLastLogItem();
        this.history.add(last);
        this.logTableModel.addItem(last);

        this.logTable.tableChanged(new TableModelEvent(this.logTableModel));
        ((DefaultTableModel)this.logTable.getModel()).fireTableStructureChanged();
        this.logTable.repaint();
        this.logTable.doLayout();
    }

}

Cuando cierro la ventana y la vuelvo a abrir, puedo ver la nueva fila.

¿Puede alguien explicarme por qué, después de seleccionar una fila, ya no veo ninguna actualización en la JTable?

¿Fue útil?

Solución

¿La llamada a update () está ocurriendo en el hilo del evento Swing? De lo contrario, el código deberá envolverse con algo como:

SwingUtilities.invokeLater(new Runnable() { public void run() {
  logTableModel.addItem(last);
}});

Otros consejos

Hay varios problemas con su código. No debería llamar a fireTableStructureChanged ya que esto está relacionado con la estructura de la tabla (no de columnas, etc.) cambiando no los datos de la tabla en sí (agregando una fila, cambiando el valor de una celda, etc.). Además, no debería necesitar llamar a repintar y doLayout en la tabla, ya que esto debería ser provocado por cambios en el modelo.

Creo que debería echar un vistazo a Cómo usar Tablas del tutorial de Java, mire específicamente el uso de modelos de tabla, escuche los cambios de datos y active los eventos de cambio de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top