我有3个ToolItem:text,item1,item2

我希望该文本项将向左对齐,而项1和项2将向右对齐

例如

 text                         item1,item2


这是代码

工具栏treeToolBar =新的ToolBar(treeComposite,SWT.NONE);

    filterText = new Text(treeToolBar, SWT.BORDER);

    ToolItem textItem = new ToolItem(treeToolBar, SWT.SEPARATOR);
    textItem.setControl(filterText);
    textItem.setWidth(filterText.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);

    Item1 = new ToolItem(treeToolBar, SWT.PUSH | SWT.RIGHT);

    item2 = new ToolItem(treeToolBar, SWT.PUSH | SWT.RIGHT);

最佳答案

如果只想在中间的某个位置放置item1和item2,则添加样式为SWT.SEPARATOR的新项目,然后设置所需的宽度以抵消这两个项目。

如果您确实希望两个项目位于工具栏的右侧,则必须动态计算该分隔符的大小。基本上,您从工具栏的大小中减去三个项目的大小(一个文本和两个推送项目)。

这是一个完整的代码片段,其中文本左对齐,按钮右对齐。 toolbar.pack()调用对于计算项目和修剪之间的空间也是必需的。我们还必须考虑到这一点。

public static void main(String[] args) {
    final Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());

    final Composite treeComposite = new Composite(shell, SWT.NONE);
    treeComposite.setLayout(new GridLayout());

    final ToolBar treeToolBar = new ToolBar(treeComposite, SWT.NONE);
    treeToolBar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

    final Text filterText = new Text(treeToolBar, SWT.BORDER);

    final ToolItem textItem = new ToolItem(treeToolBar, SWT.SEPARATOR);
    textItem.setControl(filterText);
    textItem.setWidth(filterText.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);

    final ToolItem separator = new ToolItem(treeToolBar, SWT.SEPARATOR);
    separator.setWidth(0);

    final ToolItem item1 = new ToolItem(treeToolBar, SWT.PUSH | SWT.RIGHT);
    item1.setImage(display.getSystemImage(SWT.ICON_WORKING));

    final ToolItem item2 = new ToolItem(treeToolBar, SWT.PUSH | SWT.RIGHT);
    item2.setImage(display.getSystemImage(SWT.ICON_QUESTION));

    treeToolBar.pack();
    final int trimSize = treeToolBar.getSize().x - textItem.getWidth() - item1.getWidth() - item2.getWidth();

    treeToolBar.addListener(SWT.Resize, new Listener() {
        @Override
        public void handleEvent(Event event) {
            final int toolbarWidth = treeToolBar.getSize().x;
            final int itemsWidth = textItem.getWidth() + item1.getWidth() + item2.getWidth();
            final int separatorWidth = toolbarWidth - itemsWidth - trimSize;
            separator.setWidth(separatorWidth);
        }
    });

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

关于java - 如何控制工具栏项在SWT中的位置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19938799/

10-17 01:49