我正在尝试在对话框中创建垂直滚动表,但没有成功。当我创建表格时,无论屏幕大小/分辨率如何,它都会自动扩展到需要的任何高度。大量数据会创建一个远远低于屏幕底部的表格。
我的代码是这样的(不是逐字的,可能是一个或两个类型):
final Table table = new Table(parent, SWT.SINGLE |
SWT.FULL_SELECTION | SWT.SCROLL_LINE | borderStyle | orientation );
table.setHeaderVisible(true);
table.setLinesVisible(true);
TableViewer tableView = new TableViewer(table);
// code yanked to set up the columns (movable == false,
// resiable == true, with set text, widths, and toolTipText)
tableView.setContentProvider(new ArrayContentProvider());
// BeanLabelProvider's getColumnText returns the beanDescriptor's
// getReadMethod.invoke().toString()
tableView.setLabelProvider(new BeanLableProvider(MyClass.class));
tableView.setInput(anArrayOfMyClass);
所有这些代码都存在于我的对话框类的createDialogArea()中。
无论如何,我尝试过以下方法:
treeView.setItemCount()
修剪数据,但不限制显示的数据量。table.getVerticalBar()
会返回有效的ScrollBar
和scrollbar.getVisible() == true;
?!真?证明给我看。不这么认为。 setVisible(true)
什么也没做。table.setBounds()
?不。即使我致电layout()
和/或redraw()
。createDialogArea()
内完成的。如果我在MyDialog.initializeBounds()中调用setBounds()
,它会缩小表并添加滚动条(喘气!),但对话框不会调整大小。调用table.getParent().layout(true)
会调整表格的大小,而不是对话框。 Augh!在initBounds中,我有以下代码:
Shell shell = getShell();
shell.setBounds(foo, bar, baz qux);
myTable.setBounds(foo, bar, baz-fudgeX, qux-fudgeY);
myTable.getVerticalBar().setVisible(true); // see, it wasn't null!
// this line doesn't seem to have any effect, I can comment it out and have
// the same apparent result.
shell.layout(true);
// If I call shell.pack() the table snaps back to its original size (huge).
如果没有调用pack()
,则会在对话框的底部剪切okay / cancel按钮。有了它,整个练习都没有实际意义。
为什么我会感觉到我错过了一些真正基本的东西,当别人指出它时,我会想要砸我的额头?
答案 0 :(得分:5)
您为Shell
使用了哪种布局?在调用layout()
期间,大多数布局只是询问控件的首选大小。表的首选大小是大小,可以显示所有行。如果没有更多约束,布局会将Shell调整为首选大小,这不是您想要的。
为了防止这种情况,您需要在表格上为布局设置高度提示。一个例子是snippet。如果删除该行
data.heightHint = 200;
结果壳太高了。