Java 调整工具栏SWT的大小

Java 调整工具栏SWT的大小,java,eclipse-plugin,swt,Java,Eclipse Plugin,Swt,我正在尝试设置工具栏的高度以匹配网格布局中的其他项目。以下是我正在使用的代码: public TestSwt() { Display display = new Display(); shell = new Shell(display, SWT.SHELL_TRIM); shell.setSize(800, 800); GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = 1;

我正在尝试设置工具栏的高度以匹配网格布局中的其他项目。以下是我正在使用的代码:

public TestSwt() {
    Display display = new Display();
    shell = new Shell(display, SWT.SHELL_TRIM);
    shell.setSize(800, 800);

    GridLayout gridLayout = new GridLayout();
    gridLayout.numColumns = 1;
    shell.setLayout(gridLayout);

    Composite composite = new Composite(shell, SWT.NONE);
    composite.setSize(100, 100);
    GridLayout childGridlayout = new GridLayout();
    childGridlayout.numColumns = 10;
    composite.setLayout(childGridlayout);
    composite.setBackground(display.getSystemColor(SWT.COLOR_BLUE));

    final Link link = new Link(composite, SWT.NULL);
    link.setText("Link1");
    Link link1 = new Link(composite, SWT.NULL);
    link1.setText("Link2");


    ToolBar toolBar = new ToolBar(composite, SWT.BORDER | SWT.VERTICAL);
    ToolItem item = new ToolItem(toolBar, SWT.PUSH);
    item.setText("toolbar");
    // Trying to resize toolbar
    Point size = toolBar.computeSize(SWT.DEFAULT, link.computeSize(SWT.DEFAULT, SWT.DEFAULT).y);
    toolBar.setSize(size);
    toolBar.pack();



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

    display.dispose();
}
我得到的结果是:

我想要的输出是:

我确信我遗漏了一些非常基本的东西。任何帮助都将不胜感激

编辑:

正如Andrew所建议的,我将GridData设置为LayoutData。它确实调整了工具栏的大小,但文本不可见。 使用代码:

GridData toolBarlayout = new GridData(SWT.LEFT, SWT.TOP, true, true);
toolBarlayout.heightHint = link.computeSize(SWT.DEFAULT, SWT.DEFAULT).y;
ToolBar toolBar = new ToolBar(composite, SWT.BORDER | SWT.VERTICAL);
toolBar.setLayoutData(toolBarlayout);

ToolItem item = new ToolItem(toolBar, SWT.PUSH|SWT.TOP);

item.setText("toolbar");
输出类似于:


GridLayout将允许链接小部件增长到行的高度,并调整行的高度以适应工具栏,并且工具栏希望至少与输出中的一样大。因此,您可能需要明确设置工具栏的高度(以像素为单位),而不是从链接获取工具栏的高度。但您可以登录查看
computeSize()
实际返回的内容

我将为工具栏创建一个GridData,将GridData上的heightHint设置为所需的高度,然后调用ToolBar.setLayoutData

GridData toolBarLayoutData = new GridData();
toolBarLayoutData.heightHint = ...;
toolBar.setLayoutData(toolBaryLayoutData);

GridLayout将允许链接小部件增长到行的高度,并将调整行的高度以适应工具栏,并且工具栏希望至少与输出中的一样大。因此,您可能需要明确设置工具栏的高度(以像素为单位),而不是从链接获取工具栏的高度。但您可以登录查看
computeSize()
实际返回的内容

我将为工具栏创建一个GridData,将GridData上的heightHint设置为所需的高度,然后调用ToolBar.setLayoutData

GridData toolBarLayoutData = new GridData();
toolBarLayoutData.heightHint = ...;
toolBar.setLayoutData(toolBaryLayoutData);

首先,您在组合上设置了一个
GridLayout
——该布局将覆盖您在组合的子项上设置的任何大小。@greg-449:您的建议。工具栏确实不喜欢比它们想要的小。为什么不使用另一个链接呢?当你点击工具栏时,我需要一个弹出窗口。“首先,你在
composite
上设置了一个
GridLayout
——这个布局将覆盖你在组合子项上设置的任何大小。@greg-449:你的建议。工具栏确实不喜欢比它们想要的小。”。为什么不使用另一个链接呢?当你点击工具栏时,我需要一个弹出窗口。它确实调整了工具栏的大小,但现在文本不可见。编辑问题以反映相同的内容。它确实调整了工具栏的大小,但文本现在不可见。编辑问题以反映同样的情况。