调整工具栏SWT的大小

时间:2017-03-23 18:16:02

标签: java eclipse-plugin swt

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

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();
}

我得到的输出是:

enter image description here

我想要的输出是:

enter image description here

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

编辑:

正如安德鲁建议我将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");

输出类似于:

enter image description here

1 个答案:

答案 0 :(得分:0)

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

我会为ToolBar创建一个GridData,将GridData上的heightHint设置为你想要的高度,然后调用toolBar.setLayoutData。

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