SWT -- ApplicationWindow

java语言的GUI包,个人比较喜欢SWT/Jface。 几年前用swing编写了
一套软件,在windows 上lookAndFeel的确不尽人意。

纯粹使用SWT,编码比较繁琐和杂乱。 因此可以适当的采用jface来优化,

主窗口

主窗口可以继承Jface的ApplicationWindow,比如:
public class MainGui extends ApplicationWindow{
    public MainGui() {
super(null);
addMenuBar();
addToolBar(SWT.NONE);

    }
   
    /**
     *该方法可以定义窗口的图标,标题,大小等等属性
     */
    @Override
    protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setActive();
newShell.setImage(new Image(newShell.getDisplay(),"image/logo.ico"));
newShell.setText("Boss System");
    }

    /**
     *该方法创建了菜单管理栏
     */
    @Override
    protected MenuManager createMenuManager() {
        MenuManager menubar = new MenuManager(null);
        MenuManager helpMenu = new FileMenuAction(this);  //FileMenuAction继承MenuManager 需要自己实现定义具体功能
        menubar.add(helpMenu);

        return menubar;
    }

    /**
     *该方法创建了工具栏,工具栏和菜单栏里面的按钮都可以采用Action的实现类来做触发实现
     */

    @Override
    protected ToolBarManager createToolBarManager(int style) {
        ToolBarManager toolbar = new ToolBarManager(SWT.FLAT);
        //添加toolbar按钮,实现继承于Action

         return toolbar;
       
    }
   
    /**
     * 该方法创建窗口的主题内容,你需要仔细研究SWT的layout以及其对应的参数配置,
     * 否则你可能无法看到你所创建的控件。
    */

    @Override
    protected Control createContents(Composite parent) {
        Composite body = new Composite(parent,SWT.BORDER);
        //...实现窗口体的详细内容

        return body;
    }

    public void static main(String[] args) {
        MainGui appWin = new MainGui();
        appWin.setBlockOnOpen(true);  //阻塞,等待UI事件
        appWin.open(); //打开窗口,显示
        Display.getCurrent().dispose(); //关闭窗口,销毁控件
    }

}

上面这段代码基本上勾勒出了Jface主程序的结构,需要关注的是一下几点:
1. SWT/Jface的大部分常量都定义在SWT这个类中,包括风格,常用颜色,layout常量等等;
2. 必须熟悉layout的使用,以及与其相对应得数据对象。 比如:RowLayout和RowData,
   FormLayout和FormData,否则你可能无法正确显示你的控件。
3. 根据需要,覆盖ApplicationWindow的方法。比如如果你不需要工具栏,那你完全不需要
    override createToolBarManager方法。
4. 你得到当前设备对象Display的方法是 Display.getCurrent()
5. 如果你想释放控件,你无需逐个调用每个控件的dispose方法。 父控件的dispose会级联
   调用子控件的dispose方法。

你可能感兴趣的:(数据结构,UI,windows,swing,配置管理)