Question

J'ai un TreeViewer qui contient des nœuds où chaque nœud a certains attributs avec leurs valeurs correspondantes.J'ai aussi un TableViewer pour afficher les attributs et leurs valeurs correspondantes du nœud sélectionné à partir de la TreeViewer.Dans le tableau il y a seulement 2 colonnes, l'une affichant le nom de l'attribut (sur la gauche) et l'autre montrant la valeur de cet attribut (sur la droite).

J'ai les attributs et les valeurs dans un HashMap(attributs, valeur)

Mais étant donné que chaque nœud représente un objet, l'appel à AttributeLabelProvider (implémente ITableLabelProvider méthode getColumnText(Object element, int columnIndex) n'arrive qu'une fois.Mais j'ai besoin de créer 10 lignes pour afficher toutes les 10 attributs de la colonne d'attributs et de leurs valeurs dans la colonne de droite.

tableViewer.setInput(selectedNode);
// The following is where I have implemented IStructuredContentProvider to use as my content provider
@Override
public Object[] getElements(Object inputElement) {
    TreeNode TN = (TreeNode) inputElement;
    return TN.getAttributes().values().toArray(); // ***
}

*** ici je ne peux que réussir keySet() ou values() parce que mes attributs sont dans un HashMap.

Merci d'avance :)

Était-ce utile?

La solution 2

J'ai trouvé une solution, mais je ne suis pas sûr si ce est sûr.Ce sera le retour à la fois les valeurs et les clés dans un tableau d'Objets[]:

@Override
public Object[] getElements(Object inputElement) {
    TreeNode TN = (TreeNode) inputElement;
    return TN.getAttributes().entrySet().toArray();
}

Ensuite, j'ai utilisé les éléments suivants dans ITableLabelProvider.getColumnText() pour les colonnes d'un et de deux:

col.setLabelProvider(new ColumnLabelProvider() {   // Column 1 (contains the keys)
        @Override
        public String getText(Object element) {
            String str = element.toString();
            String[] parts = str.split("=");
            return parts[0];
        }
    });

col.setLabelProvider(new ColumnLabelProvider() {  // Column 2 (Contains the values)
        @Override
        public String getText(Object element) {
            String str = element.toString();
            String[] parts = str.split("=");
            return parts[1];
        }
    });

Autres conseils

Votre IStructuredContentProvider.getElements la méthode doit retourner un tableau d'objets où chaque objet représente une ligne dans la table.Si dans votre cas, vous avez besoin de retourner un tableau de 10 objets row.Si vous ne disposez pas d'un tel objet, vous devrez en créer un.

L' ITableLabelProvider.getColumnText la méthode sera passé un de ces objets row.Vous devez être en mesure d'obtenir les données de la colonne à partir de votre ligne d'objet.

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