2011-12-28 35 views
3

下擴大控制到固定寬度的控制我想完成下列工作:如何使水平在SWT

horizontal expansion

其中一個寬度固定的控制是鄰近水平擴大控制填充可用空間。

我已經能夠使用GridLayout做到這一點垂直

vertical expansion

通過使用下面的代碼:

parent.setLayout(new GridLayout()); 

Button button1 = new Button(parent, SWT.PUSH); 
button1.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false)); 
button1.setText("First"); 

Button button2 = new Button(parent, SWT.PUSH); 
button2.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true)); 
button2.setText("Second"); 

有沒有辦法做到的橫版而不必明確指定列的數量?其他GUI工具包(例如Android,QT和GTK)確實有助於這樣的事情。

目前我的水平的解決方案是這樣的:

parent.setLayout(new GridLayout(2, false)); 

Button button1 = new Button(parent, SWT.PUSH); 
button1.setLayoutData(new GridData(GridData.BEGINNING, GridData.FILL, false, true)); 
button1.setText("First"); 

Button button2 = new Button(parent, SWT.PUSH); 
button2.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true)); 
button2.setText("Second"); 
+0

改爲使用[MigLayout](http://www.miglayout.com/),它將爲您解決大量的佈局問題;] .. – Sorceror 2011-12-28 09:59:39

回答

4

您必須指定GridLayout列數。我不明白爲什麼這應該是一個問題(和你似乎工作)。根據您擁有的窗口小部件數量,您可以根據需要計算列數。

This SWT Layout article是相當不錯的。如果要控制第一個對象的大小,請在GridData中指定widthHint

+1

指定列數不是一個「問題」 ,但它是多餘的。理想情況下,會存在一個不復雜的'Layout'類,允許指定元素的水平擴展。 – kostmo 2011-12-28 18:50:28

+1

事實上,它不是多餘的,因爲必須有一些方法來告訴佈局網格上的位置,並且'GridLayout'就是這種方法。有許多佈局經理,有些更簡單,但能力更差。對於我來說,我發現很好學習像GridLayout這樣的好東西,並將它用於一切,因爲它非常靈活和強大,而不是爲了不同的目的學習5種不同的佈局管理器。 – 2011-12-28 19:40:05

+2

在Android中有'LinearLayout',在GTK +中有'HBox'。理想情況下SWT中的(水平)'RowLayout'類將允許擴展指定的元素,但似乎只有'GridLayout'支持指定的擴展。即使不需要網格功能,我也不得不使用'GridLayout'並顯式指定列數。我不想告訴它在_grid_上的位置 - 我只想要一行。對於其他工具包的線性佈局類,列的數量由添加到佈局的子項的數量推斷。 – kostmo 2011-12-28 21:39:04