?? myactiongroup.java
字號:
package cn.com.chengang.jface.tableviewer;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.actions.ActionGroup;
public class MyActionGroup extends ActionGroup {
private TableViewer tv;
private CheckboxTableViewer ctv;// 14.7節增加的代碼
// 在Action要使用到TableViewer對象,所以通過構造函數把它傳進來
public MyActionGroup(TableViewer tv) {
this.tv = tv;
}
// 14.7節增加的代碼
public MyActionGroup(TableViewer tv, CheckboxTableViewer ctv) {
this.tv = tv;
this.ctv = ctv;
}
// 生成菜單Menu,并將兩個Action傳入
public void fillContextMenu(IMenuManager mgr) {
// 加入兩個Action對象到菜單管理器
MenuManager menuManager = (MenuManager) mgr;
menuManager.add(new OpenAction());
menuManager.add(new RefreshAction());
// 生成Menu并掛在表格table上。menu和table兩個對象互為對方的參數
Table table = tv.getTable();
Menu menu = menuManager.createContextMenu(table);
table.setMenu(menu);
}
// “打開”的Action類
private class OpenAction extends Action {
public OpenAction() {
setText("打開");
}
public void run() {// 繼承自Action的方法,動作代碼寫此方法中
IStructuredSelection selection = (IStructuredSelection) tv.getSelection();
PeopleEntity o = (PeopleEntity) selection.getFirstElement();
if (o == null)
MessageDialog.openInformation(null, null, "請先選擇記錄");
else
MessageDialog.openInformation(null, null, o.getName());
}
}
// 刷新的Action類
private final class RefreshAction extends Action {
public RefreshAction() {
// 給Action設置圖像。getImageDesc為自定義方法,得到一個圖像
setHoverImageDescriptor(getImageDesc("refresh.gif"));
setText("刷新");
}
public void run() {
tv.refresh();
}
}
// 增加的Action類
private class AddAction extends Action {
public AddAction() {
setHoverImageDescriptor(getImageDesc("project.gif"));// 正常狀態下的圖標
setText("增加");
}
public void run() {
PeopleEntity o = createPeople();// 創建一個新實體對象
tv.add(o);// 增加到表格界面中
List list = (List) tv.getInput();
list.add(o); // 增加到數據模型的List容器中
// ....向數據庫增加記錄(略)
}
private PeopleEntity createPeople() {// 創建一個新實體對象
PeopleEntity o = new PeopleEntity();
o.setId(5L);
o.setName("新人");
o.setSex(true);
o.setAge(15);
o.setCreateDate(new Date());
return o;
}
}
private class RemoveAction extends Action {
public RemoveAction() {
setHoverImageDescriptor(getImageDesc("remove.gif"));// 正常狀態下的圖標
// 按鈕無效狀態下的圖標。不設也可以,當按鈕失效時會自動使正常圖片變灰。
setDisabledImageDescriptor(getImageDesc("disremove.gif"));
setText("刪除");
}
// 這里演示了如何從表格中刪除所選的多個記錄
public void run() {
if (ctv != null) {
Object[] checkObj = ctv.getCheckedElements(); // 取得打勾的記錄
if (checkObj.length == 0) {// 判斷是否有勾選復選框
MessageDialog.openInformation(null, "提示", "請先勾選記錄");
return;
}
for (int i = 0; i < checkObj.length; i++) {
PeopleEntity o = (PeopleEntity) checkObj[i];
ctv.remove(o);// 從表格界面上刪除
List list = (List) tv.getInput();
list.remove(o);// 從數據模型的List容器中刪除
// ....,從數據庫中刪除記錄(略)
}
} else {
IStructuredSelection s = (IStructuredSelection) tv.getSelection();// 得到選擇的對象集
if (s.isEmpty()) {// 判斷是否有選擇
MessageDialog.openInformation(null, "提示", "請先選擇");
return;
}
for (Iterator it = s.iterator(); it.hasNext();) {
PeopleEntity o = (PeopleEntity) it.next();
tv.remove(o);// 從表格界面上刪除
List list = (List) tv.getInput();
list.remove(o); // 從數據模型的List容器中刪除
// ....,從數據庫中刪除記錄(略)
}
}
}
}
// 新增的“全選”Action
private class SelectAllAction extends Action {
public SelectAllAction() {
setHoverImageDescriptor(getImageDesc("selectall.gif"));
setText("全選");
}
public void run() {
if (ctv != null)
ctv.setAllChecked(true); // 將所有復選框打勾
}
}
// 新增的“全不選”Action
private class DeselectAction extends Action {
public DeselectAction() {
setHoverImageDescriptor(getImageDesc("deselect.gif"));
setText("全不選");
}
public void run() {
if (ctv != null)
ctv.setAllChecked(false); // 取消所有復選框打勾
}
}
// 自定義方法。生成Action對象,并通過工具欄管理器ToolBarManager填充進工具欄
public void fillActionToolBars(ToolBarManager actionBarManager) {
// 創建Action對象,一個按鈕對應一個個的Action
Action refreshAction = new RefreshAction();
Action addAction = new AddAction();
Action removeAction = new RemoveAction();
Action selAllAction = new SelectAllAction();
Action deselAction = new DeselectAction();
// 將按鈕通過工具欄管理器ToolBarManager填充進工具欄,如果用add(action)
// 也是可以的,只不過只有文字沒有圖像。要顯示圖像需要將Action包裝成
// ActionContributionItem,在這里我們將包裝的處理過程寫成了一個方法
actionBarManager.add(createContributionItem(refreshAction));
actionBarManager.add(createContributionItem(addAction));
actionBarManager.add(createContributionItem(removeAction));
actionBarManager.add(createContributionItem(selAllAction));
actionBarManager.add(createContributionItem(deselAction));
actionBarManager.update(true);// 更新工具欄,否則工具欄不顯示任何按鈕
}
// 將Action包裝成ActionContributionItem類的方法。實際上Action加入到
// ToolBarManager或MenuManager里時,也做了ActionContributionItem的包裝,
// 大家可以看它ToolBarManager的add(IAction)的源代碼即知
private IContributionItem createContributionItem(IAction action) {
ActionContributionItem aci = new ActionContributionItem(action);
aci.setMode(ActionContributionItem.MODE_FORCE_TEXT);// 顯示圖像+文字
return aci;
}
// 得到一個圖像的ImageDescriptor對象
private ImageDescriptor getImageDesc(String fileName) {
try {
URL url = new URL("file:icons/" + fileName);
return ImageDescriptor.createFromURL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -