鉴于以下情况:
// Initializing a new composite within a parent UI container
Composite composite = new Composite(parent, SWT.NONE);
Label label = new Label(composite, SWT.NONE);
label.setText("Hi. I am a label and I'm drawn correctly.");
Display.getDefault().syncExec(new Runnable() {
// Here I'm trying to draw a new label onto this composite
Label newLabel = new Label(composite, SWT.NONE);
Label.setText("I am a test label. You should see me now.");
// Change the text of 'label' here
label.setText("Uh-oh. My text has been altered.");
// Let's redraw the parent UI component to see the new label drawn
parent.redraw();
});
永远不会绘制 newLabel
,尽管label
的文字已被视觉上改变了。同样,在syncExec()
内部设置UI元素会导致其视觉删除。那是为什么?
我看不出为什么不可能这样做的正当理由。
答案 0 :(得分:4)
我不知道这是否是唯一的问题,但你必须至少重新发布复合材料及其子代。否则标签的大小将为0,因此不可见。您通常通过调用composite.layout()
来执行此操作。除非复合材料没有布局管理器;然后你必须手动设置它的界限。