**請注意,使用HORIZONTAL_ALIGN_FILL
和GRAB_HORIZONTAL
氣餒。相反,你應該使用public GridData(int, int, boolean, boolean)
構造函數。 **
要性能稍微簡化您的代碼段(僅適用於複合一列,且只有一個默認的表列 - 參見下面的完整代碼):
// ...
final Composite compositeArea = new Composite(parent, SWT.NONE);
compositeArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
compositeArea.setLayout(new GridLayout());
final Table table = new Table(compositeArea, SWT.BORDER | SWT.V_SCROLL);
table.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
// ...
.. 。我們看到Table
不適合可用空間或按預期顯示滾動條,並且在調整Shell
的大小時也會發生相同情況。
在回答你的問題,這是因爲Table
的佈局數據不知道如何佈局垂直 - 你只指定了兩個水平樣式屬性。
如果我們改用建議的構造函數:
table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
...的Table
採取正確的可用空間,顯示滾動條,並更新正確時Shell
調整大小。使用佈局數據,我們告訴Table
填充可用的水平空間,如果需要,Table
將顯示滾動條。
完整的示例:
public class TableResizeTest {
private final Display display;
private final Shell shell;
public TableResizeTest() {
display = new Display();
shell = new Shell(display);
shell.setLayout(new FillLayout());
shell.setMaximized(true);
final Composite parent = new Composite(shell, SWT.NONE);
parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
parent.setLayout(new GridLayout());
// -- snippet --
final Composite compositeArea = new Composite(parent, SWT.NONE);
compositeArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
compositeArea.setLayout(new GridLayout());
final Table table = new Table(compositeArea, SWT.BORDER | SWT.V_SCROLL);
// table.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
// -------------
for (int i = 0; i < 20; ++i) {
new TableItem(table, SWT.NONE).setText(String.valueOf(i));
}
}
public void run() {
shell.setSize(300, 300);
shell.open();
while (!shell.isDisposed()) {
if (display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
public static void main(final String... args) {
new TableResizeTest().run();
}
}
這是否幫助:[鏈接](http://stackoverflow.com/questions/7740387/swt-java-how-to-prevent-window-from-調整)。注意關於事件處理程序的答案... – MordechayS
所以你不想讓表格調整對話框的大小?你可以設置'GridData#widthHint'和'GridData#heightHint',但我不會建議,除非必要。 – Baz