Domanda

Ho un JTable (estesa) e un'implementazione di TableModel, in cui ho i metodi ...

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

... entro l'implementazione del modello da tavolo. Ho verificato che questi funzionano correttamente.

Tuttavia, sto avendo problemi ad ottenere le modifiche apportate nel modello da tavolo per propagare al JTable reale. In questa tabella ho consentire solo la selezione singola riga, e hanno il pulsante separato per up e Giù . Quando una riga viene eletto, ho bisogno di essere in grado di spostare la riga su e giù, e di preservare la selezione.

es.
Se le mie righe sono [A, B, C(selected)], e premere il pulsante up,
Dovrei ottenere [A, C(selected), B].

I vari approcci che ho provato finora sia non riescono a aggiornare i valori nel JTable, o perdere la selezione.


NOTA:
Sono riluttanti a utilizzare una soluzione che richiede una chiamata esplicita a repaint().
Si supponga che tutte le celle del JTable sono non modificabile.

È stato utile?

Soluzione

Rispondere stessa domanda:

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

Dove mTable è il JTable e mTableModel è la mia implementazione del modello da tavolo, ed è equivalente a mTable.getModel() (e typecast).

dovrebbe aver curiosato più prima di chiedere!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top