是否在(a)syncExec中绘制新元素是不可能的?

时间:2011-10-19 09:08:11

标签: user-interface swt eclipse-rcp

鉴于以下情况:

// 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元素会导致其视觉删除。那是为什么?

我看不出为什么不可能这样做的正当理由。

1 个答案:

答案 0 :(得分:4)

我不知道这是否是唯一的问题,但你必须至少重新发布复合材料及其子代。否则标签的大小将为0,因此不可见。您通常通过调用composite.layout()来执行此操作。除非复合材料没有布局管理器;然后你必须手动设置它的界限。