我有一個複合元素,最初有一個標籤。現在我在它上面調用dispose(標籤)並在同一個容器(複合榆樹)中創建另一個標籤,但是我看不到新文本。它讓我質疑如何在組合上啓用重繪,以便新標籤(或任何其他可能創建的組件)將會替代舊標籤。 下面是代碼我有(分成單元測試重繪複合)SWT複合 - 重繪問題
private Label createLabel(Composite parent) {
Label label = new Label(parent, SWT.NONE);
label.setAlignment(SWT.CENTER);
label.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
return label;
}
private void changeText() {
assert testCell != null : "Please initialize test cell";
testCell.getChildren()[0].dispose();
Label l = createLabel(testCell);
l.setText("New TexT");
testCell.redraw();
}
private void draw() {
Display display = new Display();
shell = new Shell(display);
shell.setLayout(new GridLayout(2,false));
testCell = new Composite(shell,SWT.BORDER);
testCell.setLayout(new GridLayout());
Label l = createLabel(testCell);
l.setText("Old Text");
Composite btnCell = new Composite(shell,SWT.NONE);
btnCell.setLayout(new GridLayout());
Button b = new Button(btnCell, SWT.PUSH);
b.setText("Change");
b.addListener(SWT.MouseDown, new Listener() {
public void handleEvent(Event e) {
changeText();
}
});
正如你所看到的,我呼籲重繪在複合後,我加入了一個新元素。另外,我已經驗證了在處理調用後,testCell.getChildren()。length返回0,如預期的那樣,當我創建一個新標籤時,我得到相同的表達式返回1,驗證新元素確實得到添加到它的父級複合容器 我在這裏錯過了什麼嗎?
對不起重振這個話題,但我最近尋求類似的問題的解決方案,這個話題幫助了很多,但調整我的窗口,我不得不使用`shell.pack()``因爲shell.layout ()`什麼也沒做。可能會對某人有幫助。 :) – mykola 2012-03-21 13:37:00