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方法。
一套软件,在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方法。