JFace 是建立在 SWT 之上的 UI 部件,它是 SWT 的扩展并能和SWT交互。
ApplicationWindow和Action
org.eclipse.jface.window.ApplicationWindow;
JFace为了简化窗口的设计特别设计了类,比如ApplicationWindow这一个类,它里面包含了六个默认方法,分别用于创建内容、菜单、工具栏、状态栏以及初始化和销毁。这样使整个程序的结构易于控制,而不是像单独用SWT开发时一切需要程序员自己实现。
ApplicationWindow创建窗体
窗体的布局 默认为网格式布局(GridLayout)
public class JFaceWindowsClass extends ApplicationWindow {
JFaceWindowsClass() {
//父类接受一个参数为Shell类的对象作为父窗口句柄,
//如果这个窗口为顶级窗口的话,则传null
super(null);
}
public void run() {
//直到窗口关闭方能从 open()方法返回
setBlockOnOpen(true);
//打开窗口
open();
//关闭窗口时释放在操作系统中用到的资源
Display.getCurrent().dispose();
}
//创建并放置窗口小部件
public Control createContents(Composite parent) {
// 设置窗体大小
parent.getShell().setSize(500, 375);
// 设置窗体标题
parent.getShell().setText("JFace ApplicationWidows 实例");
return parent;
}
public static void main(String[] args) {
new JFaceWindowsClass().run();
}
}
在 JFace 窗口添加 SWT 基本组件:createContents()
ApplicationWindow 将在所有其他窗口控件创建之后,窗口在屏幕上显示之前调用createContents方法。
ToolBarManager和MenuManger
JFaceWindowsClass() {
// 父类接受一个参数为Shell类的对象作为父窗口句柄,
// 如果这个窗口为顶级窗口的话,则传null
super(null);
//在构造函数中调用addMenuBar和addToolBar让工具条和菜单显示出来
addMenuBar();
addToolBar(SWT.FLAT | SWT.WRAP);
}
ToolBarManager 是对SWT的ToolBar控件的封装。
//构造方法 public ToolBarManager() public ToolBarManager(int style) public ToolBarManager(ToolBar toolbar)
一般我们都是向ToolBarManager里面添加Action,显示的效果就是一个Button
//创建工具条 @Override protected ToolBarManager createToolBarManager(int style) { ToolBarManager toolbar = new ToolBarManager(); return toolbar; }
MenuManger//创建菜单 @Override protected MenuManager createMenuManager() { MenuManager menubar = new MenuManager(); MenuManager fileMenu = new MenuManager(" &File "); menubar.add(fileMenu); return menubar; }
1
现在这样还是没有效果的,要想有效果。还要加Action
自定义Action动作
action 通常被称为动作命令, 可以关联到菜单,工具条,以及按钮。action 允许共享多个控件触发代码从而消除冗余代码。
Action构造器
protected Action()
protected Action(String text)
protected Action(String text,ImageDescriptor image)
protected Action(String text,int style)
Action是jface中的一个概念,在jface中通过org.eclipse.jface.action中的Action和ActionContributionItem类实现了视图和处理代码的分离,这样无论何时用户触发了一个控件的事件,都会激活一个相应的Action类实例来进行时间处理。
Action的功能
Action里面最重要的方法是run(),它也是事件触发以后执行的代码。
public class NewAction extends Action {
@Override
public void run() {
System.out.println("点击了 新建");
}
//新建文件
public NewAction() {
//设置该action的对应按钮上的文本和按钮风格
super("新建",AS_PUSH_BUTTON);
//设置提示标签
setToolTipText("新建文件");
}
}
调用了父类的构造函数,其中第一个参数是Action对应的文本,而第二个参数则是一个风格参数。
效果就是Action被附加在了一个按钮上面,而按钮上显示的文本就是新建
Action关联菜单和工具栏
修改上述JFaceWindowsClass类中的重载方法
//创建工具条
@Override
protected ToolBarManager createToolBarManager(int style) {
ToolBarManager toolbar = new ToolBarManager();
toolbar.add(new NewAction());
return toolbar;
}
//创建菜单
@Override
protected MenuManager createMenuManager() {
MenuManager menubar = new MenuManager();
MenuManager fileMenu = new MenuManager(" &File ");
fileMenu.add(new NewAction());
menubar.add(fileMenu);
return menubar;
}
运行后,长这样。
菜单和工具栏共用一个 Action ,无论是从菜单还是从工具栏执行都能实现文件新建你可以直接点击工具栏的新建,如下:
也可以在菜单栏中 File-新建
不管点击哪个,都能触发我们刚自定义的NewAction类中的run方法
ActionContributionItem
Contribution直译:贡献、捐赠
MessageDialog
MessageDialog的用法
MessageDialog的用法很简单,只需要一句话.
MessageDialog.openInfomation(shell,title,message);
MessageDialog.openConfirm(shell,title,message);
MessageDialog.openQuestion(shell,title,message);
MessageDialog.openError(shell,title,message);
这四个的不同之处有三点:
提示的图标、 显示的按钮、 返回值
openInfomation 类似i的图标 一个确定 void
openConfirm 问号图标 确定和取消 boolean
openQuestion 问号图标 是和否 boolean
openError 一个X的图标 确定 void
确认信息对话框
信息提示对话框用来向用户显示提示性的信息,用户通过对话框上的按钮来对信息进行确认。
构造
public static boolean openConfirm(Shell parent, String title, String message)
//使用举例
MessageDialog.openConfirm(shell, "对话框","请确认信息");
提示信息对话框
构造
public static void openInformation(Shell parent, String title, String message)
//使用举例
MessageDialog.openInformation(shell, "对话框","提示信息");
错误信息提示对话框
构造
public static void openError(Shell parent, String title, String message)
//使用举例
MessageDialog.openError(shell, "对话框","错误信息");
重要
自定义对话框
自定义对话框是通过自定义一个类通过继承 Dialog 类来定制的。
public class CustomDialog extends Dialog {
......
}
向导对话框
Wizard类
其他对话框
颜色选择对话框
字体选择对话框
文件选择对话框
TableViewer
TableViewer
TableViewer和Table关系
TableViewer把Table组件作为一个实例变量,从而实现了对Table功能的扩展
public class TableViewer extends AbstractTableViewer { private Table table; }
TableViewer构造 public TableViewer(Composite parent) public TableViewer(Composite parent,int style) public TableViewer(Table table)
使用TableViewer的好处在哪
将组件的数据和组件显示分离开来,例如,
将表格和表格中的数据分离开来,使用SWT的Table、TableColumn和TableItem空间展现表格,
而使用TabelViewer等查看器管理表格的数据。这种设计很大程度上简化了表格、树等复杂的UI编程
TableViewer使用
在得到由List装载的包含数据信息的实体类对象后,
接下来就是使用TableViewer来显示这些数据,实现过程一般要经过如下步骤:
第一步:创建一个TableViewer对象,并在构造函数中用式样设置好表格的外观,这与其他SWT组件的用法一样。
第二步:通过表格内含的Table对象设置布局方式,一般都使用TableViewer的专用布局管理器TableLayout。该布局方式将用来管理表格内的其他组件(如TableColumn表格列)。
第三步:用TableColumn类创建表格列。
第四步:设置内容器和标签器。内容器和标签器是JFace组件中的重要概念,它们分别是IStructuredContentProvider、ITableLabelProvider两个接口的实现类,它们的作用就是定义好数据应该如何在TableViewer中显示。
第五步:用TableViewer的setInput方法将数据输入到表格。
TreeViewer
TreeViewer
构造器
TreeViewer(Composite parent)
TreeViewer(Composite parent, int style)
TreeViewer(Tree tree)
TreeViewer 常用的 API
editElement(Object element, int column)开始编辑给定元素。
getCellEditors()获得这个树查看器的单元编辑器。
getCellModifier()获得这个树查看器的单元修改器。
getControl()获得与这个查看器相关的控件。
getTree()获得树查看器的树控件。
getExpanded(Item item)返回给定的 SWT 项是否展开或收缩。
showItem(Item item)显示给定项。
isExpandable(Object element)返回代表给定元素的树的节点是展开还是收缩。
setSelection(List items)设置选择给定的列表项。
setCellEditors(CellEditor[] editors)为树查看器设置单元格编辑器。
removeAll(Control widget)从给定的控件中移除所有项。
setCellModifier(ICellModifier modifier)为树查看器设置单元格修改器。
setLabelProvider(IBaseLabelProvider labelProvider)设置标签提供器。
setExpanded(Item node, boolean expand)设置给定项的展开状态。