工作,這就是我想實現,使用SWT:行佈局不嵌套複合
對於這一點,我想使用RowLayout
嵌套的Composite
,包裝複合材料的根據可用空間進行控制。下面的代碼工作完美:
public class RowLayoutExample {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("SWT RowLayout test");
shell.setLayout(new RowLayout(SWT.HORIZONTAL));
for (int i = 0; i < 10; i++) {
new Label(shell, SWT.NONE).setText("Label " + i);
}
shell.setSize(400, 250);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
這顯示(請注意下一行的最後一個標籤的很好的總結 - 此外,在外殼調整,組件封裝到可用的水平空間):
當我這樣做,反而:
public class RowLayoutExample {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("SWT RowLayout test");
shell.setLayout(new RowLayout(SWT.HORIZONTAL));
Composite comp = new Composite(shell, SWT.NONE);
comp.setLayout(new RowLayout(SWT.HORIZONTAL));
for (int i = 0; i < 10; i++) {
new Label(comp, SWT.NONE).setText("Label " + i);
}
shell.setSize(400, 250);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
我有以下行爲。如果我調整外殼的大小,標籤不會包裝成多行。
在下面的圖片中,我們可以看到,複合材料膨脹出殼客戶端的面積,而不是換行到第二行。調整外殼大小不會影響這種錯誤行爲。
我使用下面的SWT版本:
<dependency>
<groupId>org.eclipse.swt</groupId>
<artifactId>org.eclipse.swt.cocoa.macosx.x86_64</artifactId>
<version>4.3</version>
</dependency>
那麼,爲什麼第二種情況是不工作?此外,是否可以使用殼牌GridLayout
,但是RowLayout
是否適用於此殼牌的小孩?
無論你喜歡,你都可以混合佈局。 –
好的,這也是我的猜測,但爲什麼嵌套的複合RowLayout不工作,而外殼的RowLayout是? – hypercube
可能與Shell RowLayout如何請求子複合來計算其大小有關。 –