我正在动态添加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);
}
}