【发布时间】:2010-07-07 14:15:33
【问题描述】:
在具有多列的树中,如何在展开/折叠和数据更新时将列的大小调整为内容?
类似question for tables 的解决方案不起作用。
同:
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();
}
这适用于数据更新(通过调用resizeTree),但对于展开/折叠,它落后了一步!
更具体地说,如果我在第一列中展开一个项目,并且基础项目比列宽长,则在下一次折叠或展开其他项目时(或者如果我直接致电resizeTree)。
以防万一:数据由TreeContentProvider和ITableLabelProvider给出,我猜ITableLabelProvider可能会导致问题(在生成标签之前调整列的宽度?! )
【问题讨论】:
标签: java user-interface tree swt