我试图在对话框中创建一个垂直滚动表,但没有成功。当我创建表格时,它会自动扩展到所需的任何高度,无论屏幕尺寸/分辨率如何。大量数据会创建一个远远低于屏幕底部的表格。
我的代码是这样的(不是逐字的,可能是一个或两个类型):
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)
调整表的大小,而不是对话框的大小。啊! 在 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()
,确定/取消按钮将从对话框底部剪掉。有了它,整个练习就变得毫无意义了。
为什么我感觉自己错过了一些非常基本的东西,当别人指出它时,我会想拍拍自己的额头?
最佳答案
您的 Shell
使用什么布局?大多数布局只是在调用 layout()
期间询问控件其首选大小。表的首选大小是可以显示所有行的大小。如果没有更多约束,布局会将 Shell 的大小调整为首选大小,这不是您想要的。
为了防止这种情况,您需要为表格上的布局设置高度提示。一个例子是 snippet 。如果删除该行
data.heightHint = 200;
生成的 Shell 太高了。
关于java - Eclipse插件开发: Vertically scrolling table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4475334/