Eclipse插件开发:垂直滚动表?

时间:2010-12-17 22:32:56

标签: java eclipse user-interface eclipse-plugin swt

我正在尝试在对话框中创建垂直滚动表,但没有成功。当我创建表格时,无论屏幕大小/分辨率如何,它都会自动扩展到需要的任何高度。大量数据会创建一个远远低于屏幕底部的表格。

我的代码是这样的(不是逐字的,可能是一个或两个类型):

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()中。

无论如何,我尝试过以下方法:

  1. treeView.setItemCount()修剪数据,但不限制显示的数据量。
  2. table.getVerticalBar()会返回有效的ScrollBarscrollbar.getVisible() == true;?!真?证明给我看。不这么认为。 setVisible(true)什么也没做。
  3. table.setBounds()?不。即使我致电layout()和/或redraw()
  4. 上述内容是在createDialogArea()内完成的。如果我在MyDialog.initializeBounds()中调用setBounds(),它会缩小表并添加滚动条(喘气!),但对话框不会调整大小。调用table.getParent().layout(true)会调整表格的大小,而不是对话框。 Augh!
  5. 在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).
    
  6. 如果没有调用pack(),则会在对话框的底部剪切okay / cancel按钮。有了它,整个练习都没有实际意义。

    为什么我会感觉到我错过了一些真正基本的东西,当别人指出它时,我会想要砸我的额头?

1 个答案:

答案 0 :(得分:5)

您为Shell使用了哪种布局?在调用layout()期间,大多数布局只是询问控件的首选大小。表的首选大小是大小,可以显示所有行。如果没有更多约束,布局会将Shell调整为首选大小,这不是您想要的。

为了防止这种情况,您需要在表格上为布局设置高度提示。一个例子是snippet。如果删除该行

data.heightHint = 200;

结果壳太高了。