2009-06-21 103 views
10

我有一個複合元素,最初有一個標籤。現在我在它上面調用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,驗證新元素確實得到添加到它的父級複合容器 我在這裏錯過了什麼嗎?

回答

22

changeText()功能,

testCell.redraw();

線應該由

testCell.layout();

更換或者,如果你想調整我t正確你應該使用

shell.layout();

+2

對不起重振這個話題,但我最近尋求類似的問題的解決方案,這個話題幫助了很多,但調整我的窗口,我不得不使用`shell.pack()``因爲shell.layout ()`什麼也沒做。可能會對某人有幫助。 :) – mykola 2012-03-21 13:37:00

-5

我會說在標籤上添加一個selectionListener。

.addSelectionListener(new SelectionAdapter() { 
    @Override 
    public void widgetSelected(final SelectionEvent e) { 
     //Change text by Label.setText(); 
    } 
}