动态处理swt小部件不会调整父组合的大小

时间:2014-08-07 10:15:22

标签: java layout eclipse-plugin swt

我正在动态添加SWT标签,如下所示:

myLabel = new Label(composite, SWT.NONE);
myLabel.setText("CUSTOM MESSAGE");
composite.layout(true, true);
composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT, true));

现在我试图按如下方式动态处理这个小部件:

if(myLabel!=null && !myLabel.isDisposed())
    myLabel.dispose();
composite.layout(true, true);
composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT, true));
composite.pack(true);

我也尝试过使用和不使用最后一行 composite.pack(true) 该页面正确显示了新添加的标签,但是当我处理标签时,标签已被处理,但其占用的空间保持不变。
我在自定义eclipse视图中使用此代码。 以下是我提到的几个链接:
SWT/JFace: remove widgets
SWT composite - redraw problem
添加更多代码:

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.part.ViewPart;

public class MyView extends ViewPart {

    private Composite composite ;
    private Label customLabel ;

    @Override
    public void createPartControl(Composite parent) {

        composite = new Composite(parent, SWT.NONE);
        composite.setLayout(new GridLayout(1, false));

        createTempField("Hello");
        //do stuff
        clearTempField();
        //do stuff
        createTempField("Bye");

    }

    private void createTempField(final String message){
        if(customLabel!=null && !customLabel.isDisposed())
            customLabel.setText(message);
        else if(composite!=null){
            customLabel = new Label(composite, SWT.NONE);
            customLabel.setText(message);
            composite.layout(true, true);
            composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT, true));
        }
    }

    private void clearTempField() {
        if(customLabel!=null && !customLabel.isDisposed())
            customLabel.dispose();
        composite.layout(true);
        composite.layout(true, true);
        composite.pack(true);
    }

}

0 个答案:

没有答案