2009-12-14 6 views
0

Étant donné un javax.swing.table.TableColumn ... est-il possible de spécifier le TableCellRenderer/TableCellEditor à utiliser pour un type donné plutôt que d'utiliser TableCellRenderer/TableCellEditor?Java Swing: Différent TableCellRenderers

Je suis conscient que je peux spécifier un DefaultCellEditor/Renderer dans la JTable, mais ce n'est pas ce que je veux.

En raison de détails (détails de code hérités), je ne suis pas en mesure de remplacer les JTable#getCellEditor(int,int) et JTable#getCellRenderer(int,int).

Toute suggestion ...

Répondre

4

Je ne suis pas assez familier avec TableCellRenderer pour être sûr que cela est approprié, mais pourriez-vous pas préciser celui qui regarde le contenu, puis envoie à d'autres visualiseurs en fonction du type ?

+0

Merci beaucoup pour la suggestion! Cela a résolu mon problème! Je suis en train de mettre en œuvre l'interface TableCellRenderer et d'inspecter le type, en redirigeant vers le CellRenderer désiré. –

2
public void setDefaultEditor(java.lang.Class<?> columnClass, 
          javax.swing.table.TableCellEditor editor) 

public void setDefaultRenderer(java.lang.Class<?> columnClass, 
           javax.swing.table.TableCellRenderer renderer) 

Ou faire comme dit Carl. Votre moteur de rendu d'éditeur unique regarde la valeur qu'il a récupérée et délègue à d'autres moteurs de rendu/éditeurs.

+0

Cela définirait l'éditeur/rendu par défaut des types sur la table dans son ensemble. Je pense que l'objectif est de les définir pour une colonne ou un ensemble de colonnes seulement. – akf

2

Notez que setDefaultRenderer() et setDefaultEditor() spécifient chacun une classe particulière pour laquelle ils doivent être appelés. Il est assez facile de concevoir un type composite avec un moteur de rendu et un éditeur personnalisés, comme suggéré in this example. Le modèle de données doit renvoyer ce type personnalisé pour une colonne donnée, mais le moteur de rendu et l'éditeur sont libres d'interpréter arbitrairement ces valeurs en fonction du contenu ou de la ligne. Dans l'exemple, Value est modélisé en tant que Boolean et Double. La vue correspondante utilise une case à cocher et une chaîne décimale formatée, tandis que la méthode compareTo() de Value assure le tri numérique.