2010-02-05 3 views
1

J'ai un JTable (étendu) et une mise en œuvre de TableModel, dans lequel j'ai les méthodes ...Java: JTable lignes de réordonnancement et rafraîchir

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

. .. dans la mise en œuvre du modèle de table. J'ai vérifié que ceux-ci fonctionnent correctement.

Cependant, je rencontre des problèmes pour que les modifications apportées au modèle de table se propagent au JTable réel. Dans ce tableau, je n'autorise qu'une seule sélection de ligne, et j'ai un bouton séparé pour Up et Down. Quand une rangée est élue, je dois être capable de déplacer cette ligne de haut en bas, et préserver la sélection.

E.g.
Si mes lignes sont [A, B, C(selected)], et que j'appuie sur le bouton haut,
, je devrais obtenir [A, C(selected), B].

Les différentes approches que j'ai essayées jusqu'ici échouent à actualiser les valeurs dans la JTable, ou perdent la sélection.


REMARQUE:
Je hésite à utiliser une solution qui nécessite un appel explicite à repaint().
Supposons que toutes les cellules du JTable sont et non modifiables.

Répondre

2

Répondre propre question:

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

mTable est le JTable et mTableModel est ma mise en œuvre du modèle de table, et est équivalent à mTable.getModel() (et typecast).

Doit avoir passé plus de temps avant de demander!