1

当我尝试在复合材料中使用coolBar 然后将此复合材料嵌入应用程序时遇到问题。coolBar 根本没有出现。其他工具不会出现此问题,例如 toolBar 和其他组合。我能做错什么或忘记什么?

在遵循代码之前,我参考了我的系统:

  • Win7
  • Eclipse:版本:Indigo Service Release 2 Build id:20120216-1857
  • 谷歌 WindowBuilder 1.5.0 谷歌
  • 插件 3.1.0
  • SWT 设计器 1.5.0
  • 谷歌网络工具包 2.4.0

复合代码:

package xx.xxx.xx.pcommJavaGUI.composites;

import org.eclipse.swt.widgets.Composite;

public class TestComposite extends Composite {

    public TestComposite(Composite parent, int style) {
        super(parent, style);
        setLayout(new GridLayout(1, false));

        CoolBar coolBar = new CoolBar(this, SWT.FLAT);

        CoolItem coolItem = new CoolItem(coolBar, SWT.NONE);

        Button btnTest = new Button(coolBar, SWT.NONE);
        coolItem.setControl(btnTest);
        btnTest.setText("Test");

        Tree tree = new Tree(this, SWT.BORDER);
        tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

    }

    @Override
    protected void checkSubclass() {
        // Disable the check that prevents subclassing of SWT components
    }

}

和应用程序窗口代码:

package xx.xxx.xx.pcommJavaGUI.composites;

import org.eclipse.swt.SWT;

public class TestApplication {

    protected Shell shell;

    public static void main(String[] args) {
        try {
            TestApplication window = new TestApplication();
            window.open();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void open() {
        Display display = Display.getDefault();
        createContents();
        shell.open();
        shell.layout();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }

    protected void createContents() {
        shell = new Shell();
        shell.setSize(450, 300);
        shell.setText("SWT Application");
        shell.setLayout(new GridLayout(1, false));

        TestComposite tc = new TestComposite(shell, SWT.NONE);
        GridData gd_tc = new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1);
        tc.setLayoutData(gd_tc);            
    }
}

感谢您的帮助。

4

2 回答 2

1

这可能只是因为您没有为酷栏设置布局数据。请参阅本文以了解布局的工作原理。

于 2012-11-23T06:14:47.407 回答
1

您必须CoolItem手动设置大小。

  • 首先,pack();Button将其设置为默认大小。
  • 然后将 的大小设置为CoolItem的大小Button

Button: _

    Button btnTest = new Button(coolBar, SWT.NONE);
    coolItem.setControl(btnTest);
    btnTest.setText("Test");

    // If you do not call this, btnTest.getSize() will give you x=0,y=0.
    btnTest.pack();

设置大小CoolItem

    Point size = btnTest.getSize();
    coolItem.setControl(btnTest);
    coolItem.setSize(coolItem.computeSize(size.x, size.y));

链接

于 2012-11-23T07:40:26.360 回答