菜單和工具欄
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);//建立一個分隔符; |
3.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上設置新的佈局以及新的組件
拖放
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爲傳輸數據
5.設置拖放監聽
public void drop(DropTargetEvent e){
if(((String)e.data).equals("標誌")){
相應的操作
}
}
}