Dans un arbre comportant plusieurs colonnes, comment redimensionner les colonnes en contenu lors de l'expansion/réduction et de la mise à jour des données? La solution au problème question for tables ne fonctionne pas.Redimensionner automatiquement les colonnes lorsque les éléments se développent
Identique:
tree.addListener(SWT.Collapse, new Listener(){
@Override
public void handleEvent(Event e) {
expandAndResize(false, (TreeItem) e.item);
}
});
tree.addListener(SWT.Expand, new Listener() {
@Override
public void handleEvent(Event event) {
expandAndResize(false, (TreeItem) event.item);
}
});
private static void expandAndResize(Boolean expand_, TreeItem item_)
{
System.out.println((expand_?"Expanding":"Collapsing") + "item={" + item_ + "}");
item_.setExpanded(expand_);
System.out.println(" Resizing columns");
resizeTree(item_.getParent());
}
private static void resizeTree(Tree tree_)
{
for (TreeColumn tc: tree_.getColumns())
resizeTreeColumn(tc);
}
private static void resizeTreeColumn(TreeColumn treeColumn_)
{
treeColumn_.pack();
}
Cela fonctionne pour les mises à jour de données (en appelant le resizeTree
), mais pour déplie/replie il est un pas en arrière! Plus précisément, si je développe un élément dans la première colonne et que l'élément sous-jacent est plus long que la largeur de la colonne, le redimensionnement à cette largeur sera effectué lors d'un prochain repli ou développement d'un autre élément (ou si appeler directement resizeTree
).
Juste au cas où il est important: les données est donnée par TreeContentProvider
et ITableLabelProvider
, et je suppose que ITableLabelProvider
pourrait causer le problème (la largeur de la colonne est ajustée avant que l'étiquette est généré ?!)
X-posted to Eclipse Community Forum
merci pour une réponse détaillée, vais essayer dès que possible – MadH
fonctionne très bien, et il est en effet un double de http://stackoverflow.com/ questions/3148123/changement-étiquettes-dans-un-jface-treeviewer-sur-nœud-expansion-effondrement/3226914 # 3226914 – MadH