Java: lignes réordonnancement JTable et rafraîchissement
-
18-09-2019 - |
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.
La solution
Répondre propre question:
int row = mTable.getSelectedRow();
mTableModel.moveEntryUp(row);
mTable.getSelectionModel().setSelectionInterval(row -1, row -1);
Où 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!