java - Eclipse SWT固定表格高度,显示滚动条

标签 java swt eclipse-rcp scrollbar

我遇到以下问题...
我有一个对话框,其中包含一个 TabFolder,它本身包含一个带有表格的 TabItem。 table 上有大量的元素,导致它不仅扩大了自身的高度,而且扩大了整个外壳的高度(这是这里的主要问题)。我不希望这样,我希望表格具有固定的高度和垂直滚动条。 我整理了一个简化的代码示例,显示了我的问题:

public class Main {
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setLayout(new FillLayout());
        Composite contentComposite = new Composite(shell, SWT.NONE);
        contentComposite.setLayout(new GridLayout(4, false));

        Composite tableComposite = new Composite(contentComposite, SWT.NONE);
        tableComposite.setLayout(new GridLayout());
        tableComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

        TabFolder tabFolder = new TabFolder(tableComposite, SWT.NONE);

        TabItem tabItem1 = new TabItem(tabFolder, SWT.NONE);
        tabItem1.setText("Item 1");

        TabItem tabItem2 = new TabItem(tabFolder, SWT.NONE);
        tabItem2.setText("Item 2");

        Table table = new Table(tabFolder, SWT.BORDER | SWT.V_SCROLL);
        table.setLinesVisible(true);
        table.setHeaderVisible(true);

        String[] titles = { " ", "C", "!", "Description", "Resource", "In Folder", "Location" };
        for (int i = 0; i < titles.length; i++) {
            TableColumn column = new TableColumn(table, SWT.NONE);
            column.setText(titles[i]);
        }

        for (int i = 0; i < 100; i++) {
            TableItem item = new TableItem(table, SWT.NONE);
            item.setText(0, "x");
            item.setText(1, "y");
            item.setText(2, "!");
            item.setText(3, "this stuff behaves the way I expect");
            item.setText(4, "almost everywhere");
            item.setText(5, "some.folder");
            item.setText(6, "line " + i + " in nowhere");
        }

        for (int i=0; i<titles.length; i++) {
            table.getColumn (i).pack ();
        }

        table.setSize(200, 200);
        tabItem1.setControl(table);

        shell.pack();
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }
}

设置表格大小没有帮助,因为这总是在表格填满后发生,因此更改其他所有内容的大小。

最佳答案

我认为您需要确定 table 的所需高度。例如20 行。然后您可以指定布局提示(以像素为单位)。如果像您的情况一样,表格的父级带有 GridLayout,您可以像这样设置表格的 GridData:

GridData gridData = new GridData( SWT.FILL, SWT.FILL, true, true );
gridData.heightHint = 20 * table.getItemHeight();
table.setLayoutData( gridData );

如果其父级具有管理表格大小和位置的布局,则显式设置表格的大小(代码段中的 table.setSize(200, 200))不会产生任何效果。

关于java - Eclipse SWT固定表格高度,显示滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49069351/

相关文章:

JavaFX ImageView 图像未显示

java - 将 SWT 小部件添加到 swing JPanel

java - 将具有样式范围的 SWT StyledText 内容转换为图像

java - 当没有未保存的更改时避免关闭编辑器 Eclipse RCP

java - DJI Phantom 3 自定义任务 App,任务步骤之间存在延迟 :

JavaFX 何时可用于 Linux 世界? Oracle 会制定 JavaFX 之类的 Flash 政策让 Linux 开发者无从下手吗?

java - 如何使用 jface/swt 操作?

eclipse-rcp - 使用 tycho-p2-repository-plugin 创建带有父目录的 zip

java - TreeViewer 仅延迟加载图标

java - 双周迭代夏令时变化