2010-02-17 5 views
1

J'utilise un JTable pour afficher des données provenant d'un flux de données en continu.Java Swing: recalculer des valeurs dans un JTable, utiliser TableModel ou écrire un éditeur personnalisé?

Chaque point de données est représenté comme un objet de type X, qui a un champ d'intérêt, appelons-le valueField. Mon implémentation de l'interface TableModel a une HashMap d'objets X clavetés sur X.getId().

Les utilisateurs de l'interface graphique peuvent modifier les valeurs à l'aide d'un ensemble JSpinner en tant qu'éditeur personnalisé pour chaque cellule des colonnes correspondantes.

Toutefois, la valeur dépend également des valeurs de X.valueField dans les autres lignes.

Par exemple, ma table représente 3 objets X1, X2 et X3. Leur relation est:

X1.valueField = X2.valueField + X3.valueField

Si l'utilisateur change X1, l'un des X2 et X3 est maintenu constant (selon la logique métier), et l'autre valeur est modifiée pour garder la relation cohérente. De même, l'utilisateur peut également être en mesure de changer X2 ou X3.

Devrais-je encapsuler la relation dans mon implémentation de TableModel, ou devrais-je étendre mon éditeur de table personnalisé pour prendre en compte les façons dont la valeur peut changer?

Je pense que les deux approches fonctionneraient, mais je ne suis pas sûr de savoir laquelle est la bonne à prendre. La documentation de Sun et d'autres forums suggère d'étendre l'éditeur personnalisé pour contrôler la valeur du champ, mais il ne prend pas en compte la relation de cette valeur avec les autres membres du modèle de données sous-jacent.

Des pensées très appréciées.

00rush

Répondre

2

Je suggère que si les mods que les utilisateurs effectuent sont permanents, soit une fois que le mod est fait, les données de support est mis à jour - puis d'avoir le modèle de table maintenir les données modifiées sont correctes. D'un autre côté, s'il existe un mode édition, où l'utilisateur peut travailler avec les données et valider une fois terminé, je suggère que l'éditeur maintienne les mods jusqu'à ce que l'utilisateur déclenche le processus de validation.

Questions connexes