SWT/JFace高级应用
1菜单和工具栏
l 菜单栏
在程序中,菜单是提供信息比较好的方式,SWT中通过Menu和MenuItem实现菜单和菜单项,在程序中添加菜单步骤如下:
u 创建Menu对象,并指定创建风格,menuBar = new Menu(shell,SWT.BAR);
u 一般的,我们不在菜单栏上直接创建Item,而是先创建一个新的Menu,然后再这个Menu上添加MenuItem;
u 创建MenuItem对象,并指定创建风格;
u 设置Menu和MenuItem的关联,例如”fileMenuHeader.setMenu(fileMenu)”;
u 添加MenuItem的事件监听器,
menuBar=new Menu(shell,SWT.BAR); fileMenuHeader=new MenuItem(menuBar,SWT.CASCADE); fileMenuHeader.setText("文件(&F)"); fileMenu=new Menu(shell,SWT.DROP_DOWN); fileMenuHeader.setMenu(fileMenu); fileNewItem=new MenuItem(fileMenu,SWT.PUSH); fileNewItem.setText("新建(&N)..."); shell.setMenuBar(menuBar); |
以上是在shell上添加菜单栏,并为菜单栏添加了一个菜单项的例子,有时我们要给一个面板添加一个右键弹出的菜单,下面是以canvas为例的一个简单的程序;
Menu menu = new Menu(canvas); MenuItem menuItem = new MenuItem(menu,SWT.PUSH); menuItem.setText("删除"); canvas.setMenu(menu); |
l 工具栏
工具栏为用户提供一些常用的菜单项作为它的按扭,方便用户操作。通常工具栏的建立语句如下(与菜单的添加相类似):
u 建立工具栏对象,指定风格;
u 创建ToolItem对象,指定风格;
u 设置关联
u 添加监听器
ToolBar toolbar = new ToolBar(shell, SWT.FLAT); ToolItem newItem = new ToolItem(toolBar,SWT.PUSH); //新建了一个ToolItem newItem.setImage(new Image(newItem.getDisplay(),"images//new.gif")); //为这个ToolItem 设置一个图标 newItem.setToolTipText("新建");//设置鼠标放在Item上时提示的语句; newItem.addSelectionListener(new MenuItemListener(shell)); //添加监听事件,MenuItemListener(shell)应该是继承 SelectionAdapter或者是SelectionListener的; new ToolItem(toolBar,SWT.SEPARATOR);//建立一个分隔符; |
2对话框
对话框是一个图形界面和用户交流的主要方式;对话框的形式有许多种;
1. MessageBox:
通过VC编程的对它肯定不会陌生,最开始用消息对话框的时候,我也不知道有这么一个类,是从VC联想到的,才发现了这个类;
MessageBox主要用于系统对用户的提示信息,打开之后,您会发现它是一个非模态的对话框,以下是它的截图和使用的代码;
| MessageBox m = new MessageBox(shell); m.setText("WSC System");//对话框的名称 m.setMessage("不能有两个结束节点");//传达的消息 m.open();//打开这个对话框 /*要注意的就是这种形式的对话框,只能改变对话框的名称和它所传达的消息,它的形式是不可以改变的*/ |
2. FileDialog:
顾名思义,现在讲的一定是处理文件的对话框了;一般的这种对话框右两种形式,一是打开对话框,再一个是保存对话框
来看一个保存对话框的例子;
FileDialog file = new FileDialog(shell,SWT.SAVE);//新建一个文件对话框 file.setText("SAVE"); file.setFilterExtensions(new String[]{"*.grh"});//设置文件过滤器 String isExit = file.open();//打开的对话框返回文件的路径以及文件的名称, 我们可以通过这个字符串来判断保存的时候是否选择了一个文件;当然保存的算法还需要我们来写
|
打开形式的对话框的应用与保存对话框基本上是相同的,它也可以设置文件过滤器,open()这个方法的返回值同样是String类型;不同的是打开对话框的style不是SWT.SAVE,而是SWT.OPEN。
3. 常见的还有ColorDialog,FontDialog等;
4. 有时我们需要使用自定义的对话框,在这个对话框上构建一些组建,其实可以不使用对话框,因为对话框的初始化有些麻烦,我们可以使用一个子Shell,例如
Shell childShell = new Shell(shell);
//shell是childShell的父窗口
我们就可以在这个childShell上设置新的布局以及新的组件
3 拖放
1.拖放的基本原理
拖放源 DragSource |
数据对象 |
系统 全局变量
|
拖放目标 DragTarget |
数据对象 |
其中,系统全局变量主要是起标志作用
2.设置拖放源
setDragSource(control,”flag”); |
拖放源组件 |
该拖放源的标志 |
3.设置拖放目标:
DropTarget dt=new DropTarget(targetPlace,DND.DROP_MOVE);
targetPlace就是拖放目标
4.设置传输数据:
dt.setTransfer(new Transfer[]{TextTransfer.getInstance()});
这里以String为传输数据
dt.addDropListener(new DropTargetAdapter(){ public void drop(DropTargetEvent e){
if(((String)e.data).equals("标志")){ 相应的操作 } } } |