java - 如何在 Java/SWT 中的窗口底部放置标签
问题描述
我正在使用 SWT 编写一个 Java GUI 应用程序,它显示了一个包含数百行的大表。在窗口底部,我想要一个显示一些状态信息的固定标签。
我的程序如下所示:
public class Test {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display, SWT.SHELL_TRIM | SWT.V_SCROLL);
FillLayout fillLayout = new FillLayout();
shell.setLayout(fillLayout);
// GridLayout gridLayout = new GridLayout();
// shell.setLayout(gridLayout);
final Table table = new Table(shell, SWT.NONE);
table.setHeaderVisible(true);
final String header[] = {"Feld 1","Feld 2","Feld 3"};
table.setLinesVisible(true);
for (int i = 0; i < 3; i++) {
TableColumn column = new TableColumn(table, SWT.NONE);
column.setText(header[i]);
column.setWidth(100);
}
for (int i = 0; i < 4; i++) {
TableItem item = new TableItem(table, SWT.NONE);
item.setText(new String[] { "a" + i, "b" + i, "c" + i });
}
GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);
gridData.verticalSpan = 3;
table.setLayoutData(gridData);
Label statusLine = new Label(shell, SWT.NULL);
statusLine.setText("This shall be the status line");
gridData = new GridData(GridData.VERTICAL_ALIGN_END);
gridData.horizontalSpan = 3;
statusLine.setLayoutData(gridData);
shell.setSize(400,100);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
如果我使用的是GridLayout,则标签位于表格下方,但根据表格大小和窗口大小,标签不可见。如果我放大窗口,标签会出现,但不会停留在窗口底部,而是始终位于表格下方。并且表格不可滚动,即我看不到我的大表格的底线。
如果我使用FillLayout,表格是可滚动的,但标签占据了我窗口的右半部分。
有什么建议,我如何将标签强制放在窗口底部并且仍然可以滚动表格?
解决方案
你GridLayout
可以这样做:
GridLayout gridLayout = new GridLayout();
shell.setLayout(gridLayout);
.... your table code
// To get the table to scroll you have to give a height hint
GridData gridData = new GridData(SWT.FILL, SWT.TOP, false, false);
gridData.heightHint = 100;
table.setLayoutData(gridData);
Label statusLine = new Label(shell, SWT.NULL);
statusLine.setText("This shall be the status line");
// Set the label grid data to grab the remaining space and put the label at the bottom
gridData = new GridData(SWT.FILL, SWT.END, true, true);
statusLine.setLayoutData(gridData);
shell.setSize(400, 200);
或者让桌子抓住多余的垂直空间:
GridData gridData = new GridData(SWT.FILL, SWT.TOP, false, true);
gridData.heightHint = 100;
table.setLayoutData(gridData);
Label statusLine = new Label(shell, SWT.NULL);
statusLine.setText("This shall be the status line");
gridData = new GridData(SWT.FILL, SWT.END, true, false);
statusLine.setLayoutData(gridData);
推荐阅读
- sql - SQL 日期范围规范,显式与 BETWEEN()
- java - Return top element in a stack
- visual-prolog - 有4个条件的支票号码
- c++ - 控制允许动态运行的并发动作的数量c c ++
- python - Issues in reading date column from csv in python
- http - 是否可以同时运行 http.ListenAndServe() AND ReadFromUDP() ?
- python - How do I store the absolute value of random numbers in a certain column of an array?
- android - Android ImageView strecthes background
- c# - How can I access to my Grid table from my private method
- javascript - Javascript calculate all values from HTML list