Pregunta

tengo un JTable (ampliado) y una implementación de TableModel, en el cual tengo los métodos...

  • moveEntryUp(int rowIdx)
  • moveEntryDown(int rowIdx)

...dentro de la implementación del modelo de tabla.He verificado que funcionan correctamente.

Sin embargo, tengo problemas para que los cambios realizados en el modelo de tabla se propaguen al modelo real. JTable.En esta tabla solo permito la selección de una sola fila y tengo un botón separado para Arriba y Abajo.Cuando se elige una fila, necesito poder mover esa fila hacia arriba y hacia abajo, y preservar la selección.

P.ej.
Si mis filas son [A, B, C(selected)], y presiono el botón de arriba,
debería conseguir [A, C(selected), B].

Los diversos enfoques que he probado hasta ahora no actualizan los valores en JTable o pierden la selección.


NOTA:
Dudo en utilizar una solución que requiera una llamada explícita a repaint().
Supongamos que todas las células de la JTable son no editable.

¿Fue útil?

Solución

Respondiendo propia pregunta:

int row = mTable.getSelectedRow();
mTableModel.moveEntryUp(row);
mTable.getSelectionModel().setSelectionInterval(row -1, row -1);

Cuando mTable es el JTable, y mTableModel es mi aplicación modelo de mesa, y es equivalente a mTable.getModel() (y encasillado).

Debería haber empujado por más tiempo antes de pedir!

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