Question

J'ai un JTable (étendu) et une mise en œuvre de TableModel, dans lequel j'ai les méthodes ...

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

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

Cependant, je rencontre des difficultés à obtenir les modifications apportées au modèle de table pour se propager à la JTable réelle. Dans ce tableau, je ne permettre la sélection d'une seule ligne, et ont le bouton distinct pour Up et Bas . Lorsqu'une ligne est élu, je dois être en mesure de déplacer cette ligne vers le haut et vers le bas, et préserver la sélection.

par exemple.
Si mes lignes sont [A, B, C(selected)], et j'appuie sur le bouton haut,
Je devrais obtenir [A, C(selected), B].

Les différentes approches que je l'ai essayé jusqu'à présent, soit ne parviennent pas à actualiser les valeurs dans le JTable, ou perdent la sélection.


NOTE:
Je hésite à utiliser une solution qui nécessite un appel explicite à repaint().
On suppose que toutes les cellules du JTable sont pas modifiable.

Était-ce utile?

La solution

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 équivaut à mTable.getModel() (et typecast).

Si ai poussé autour plus longtemps avant de demander!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top