需求:
一棵多列树形,每次展开(或收起)操作后,重新设置各列宽,让其文本可以完全显示。
问题:
目前,TreeColumn提供了pack()方法来实现此功能;
但是经试验,对于首列(即有树形的列)来说,此方法计算的列宽不对,会有一部分节点的文本显示不全(貌似是SWT的BUG)。请教一下,大家遇到这个问题的时候,是怎么解决的?

解决方案 »

  1.   


    解决了,如下:public class TreeViewerAutoFitListener implements ITreeViewerListener { public void treeExpanded(TreeExpansionEvent event) {
    packColumns((TreeViewer) event.getSource());
    }

    public void treeCollapsed(TreeExpansionEvent event) {
    packColumns((TreeViewer) event.getSource());
    }

    private void packColumns(final TreeViewer treeViewer) {
    treeViewer.getControl().getShell().getDisplay().asyncExec(new Runnable() {//关键是这句Display.asyncExec()
    public void run() {
    TreeColumn[] treeColumns = treeViewer.getTree().getColumns();
    for (TreeColumn treeColumn: treeColumns) {
    if (treeColumn.getWidth() == 0)
    continue;

    treeColumn.pack();
    }
    }
    });
    }
    }
    treeViewer.addTreeListener(new TreeViewerAutoFitListener());