2013-10-08 16 views
0

下面是結果我想能夠動態調整(對不起,我可憐的瘸子技能): enter image description here 我擡頭不同的SWT佈局,但沒有提供我想要的。 所以我把我的窗口拆分成畫布,並將不同的對象插入到畫布上。 我知道我的問題來自.setBounds(),但我沒有想到一種方法來自由地放置我的對象,這很容易完成。動態窗口大小調整SWT的Java

我該如何更改我的代碼以使動態窗口調整大小,但帶有明顯的結果?

這裏一個基本的例子:

public class Main 
{ 
    private void images(Canvas Header) 
    { 
    // in Header Canvas located British flag image 
    imgGbFlag = new Label(Header, SWT.NONE); 
    imgGbFlag.setBounds(674, 10, 32, 24); 
    imgGbFlag.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); 
    imgGbFlag.setImage(SWTResourceManager.getImage(Main.class, "/Images/gb.png")); 

    // in Header Canvas located German flag image 
    imgDeFlag = new Label(Header, SWT.NONE); 
    imgDeFlag.setBounds(712, 10, 32, 24); 
    imgDeFlag.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); 
    imgDeFlag.setImage(SWTResourceManager.getImage(Main.class, "/Images/de.png")); 

    // in Header Canvas located French flag image 
    imgFrFlag = new Label(Header, SWT.NONE); 
    imgFrFlag.setBounds(750, 10, 32, 24); 
    imgFrFlag.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); 
    imgFrFlag.setImage(SWTResourceManager.getImage(Main.class, "/Images/fr.png")); 
    } 

    public void Gui(Shell shell) 
    { 
    Canvas header = new Canvas(shell, SWT.NONE); 
    header.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); 
    header.setBounds(0, 0, 792, 113); 
    images(header); 
    } 
} 
+0

請務必閱讀:[瞭解SWT中的佈局](http://www.eclipse.org/articles/article.php?file=Article-Understanding-Layouts/index.html)。 **絕對不要使用'.setBounds()',除非絕對必要。您可以使用'GridLayout's輕鬆創建您想要的GUI(介意複數形式)。 – Baz

回答

2

使用的FormLayout具有動態調整,它的最好的和易於使用的佈局調整的問題。 您需要將佈局設置爲shell和Canvas對象的formlayout,以便您可以根據%而非硬編碼實際確定所有窗口小部件的位置和大小。

您已在setBounds方法中給出硬編碼值,嘗試避免它們,否則您將始終面臨調整大小問題。

+0

在我的情況下使用相當複雜,但非常有幫助。 謝謝!現在我只需要弄清楚如何避免不同元素的重疊。 畫布對FormLayout有幫助嗎? – trolologuy

+0

您也可以使用畫布或正常的複合材料,形成佈局無關緊要。 –

+0

如果您想使用繪畫和GC,通常使用帆布 –