最近在做一个基于SWT的桌面应用程序。对这方面零基础。所以开通此专栏,总结项目中的问题和经验。顺便提一下,我的开发环境使用eclipse的windowBuilder插件。
我的需求是点击菜单栏的菜单项能够在不开启新的窗口的条件下显示不同的界面。思路是这样的:在想要显示不同界面的位置放置一个composite控件,并将此composite设置为StackLayout布局。(注意:composite的父控件的布局不可以为null,否则在运行期会出现问题。)。此时利用windowBuilder新建两个(根据你的需求是多少个不同界面)composite。并在新建的composite上完成你需要的布局。然后回到主文件。将new好的界面赋值给StackLayout对象的topControl 。最后别忘了调用父布局(此时为主程序中的composite面板)的layout方法。好了,下面看下效果和关键代码。
·点击仓库管理菜单项
·点击库存查看菜单项
核心代码如下:
menuItem.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { //Test2是自己创建的Composite。在下面给出 Test2 test2 = new Test2(composite, SWT.None); stackLayout.topControl = test2; composite.layout(); } });
public class Test2 extends Composite { /** * Create the composite. * * @param parent * @param style */ public Test2(Composite parent, int style) { super(parent, style); setBackground(SWTResourceManager.getColor(SWT.COLOR_GREEN)); Label lblTest = new Label(this, SWT.NONE); lblTest.setFont(SWTResourceManager.getFont("Microsoft YaHei UI", 29, SWT.NORMAL)); lblTest.setBackground(SWTResourceManager.getColor(SWT.COLOR_GREEN)); lblTest.setBounds(112, 111, 317, 135); lblTest.setText("我是库存查看界面"); } protected void checkSubclass() { // Disable the check that prevents subclassing of SWT components } }
希望能够帮助到大家!!!