📄 myactiongroup.java
字号:
/**
* @作者:陈刚
* @Email:glchengang@yeah.net
* @Blog:http://blog.csdn.net/glchengang
*/
package jface.tableviewer;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Iterator;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IAction;
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;
//--------文件名:MyActionGroup.java----------
public class MyActionGroup extends ActionGroup {
private TableViewer tv;
private CheckboxTableViewer ctv;
/**
* 用来接受TableViewer对象的构造函数。因为在Action会要使用到TableViewer对象 所以一定要把TableViewer传进来。
*/
public MyActionGroup(TableViewer tableViewer) {
this.tv = tableViewer;
}
public MyActionGroup(TableViewer v, CheckboxTableViewer ctv) {
this.tv = v;
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("打开");
}
/**
* 继承自Action的方法,动作代码写此方法中
*/
public void run() {
IStructuredSelection selection = (IStructuredSelection) tv.getSelection();
PeopleEntity obj = (PeopleEntity) (selection.getFirstElement());
if (obj == null)
MessageDialog.openInformation(null, null, "选选择记录");
else
MessageDialog.openInformation(null, null, obj.getName());
}
}
/**
* 刷新的Action类
*/
private final class RefreshAction extends Action {
public RefreshAction() {
//给Action设置图像。getImageDesc为自定义方法,得到一个图像
setHoverImageDescriptor(getImageDesc("refresh.gif"));
setText("刷新");
}
public void run() {
tv.refresh();//调用表格的刷新方法
}
}
private class RemoveAction extends Action {
public RemoveAction() {
//正常情况下的图标
setHoverImageDescriptor(getImageDesc("remove.gif"));
//置灰(removeAction.setEnabled(false))情况下的图标
setDisabledImageDescriptor(getImageDesc("disremove.gif"));
setText("删除");
}
/**
* 这里演示了如何从表格中删除所选的记录(可选多个)
*/
public void run() {
if (ctv != null) {
Object[] checkObj = ctv.getCheckedElements(); //取得打勾的记录
if (checkObj.length == 0) //判断是否有勾选复选框
MessageDialog.openInformation(null, "提示", "请先选择");
for (int i = 0; i < checkObj.length; i++) {
PeopleEntity o = (PeopleEntity) checkObj[i];
ctv.remove(o);
}
} else {
//得到选择的对象集
IStructuredSelection s = (IStructuredSelection) tv.getSelection();
if (s.isEmpty())
MessageDialog.openInformation(null, "提示", "请先选择");
else
for (Iterator it = s.iterator(); it.hasNext();) {
PeopleEntity o = (PeopleEntity) it.next();
tv.remove(o);
}
}
}
}
private class FirstAction extends Action {
public FirstAction() {
setHoverImageDescriptor(getImageDesc("first.gif"));
setText("首页");
}
public void run() {
/*
* 方法分两步: 第一步:从数据库中取出第一页的记录。
* 第二步:使用tv.setInput()将新得的数据集数据传入TableViewer即可
* 下一页、上一页、末页的实现方法与此雷同,实现方法参见“插件项目实战”一章
*/
}
}
private class PrevAction extends Action {
public PrevAction() {
this.setHoverImageDescriptor(getImageDesc("prev.gif"));
setText("上一页");
}
public void run() {
}
}
private class NextAction extends Action {
public NextAction() {
this.setHoverImageDescriptor(getImageDesc("next.gif"));
setText("下一页");
}
public void run() {
}
}
private class LastAction extends Action {
public LastAction() {
setHoverImageDescriptor(getImageDesc("last.gif"));
setText("末页");
}
public void run() {
}
}
//新增的“全选”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); //取消所有复选框打勾
}
}
/**
* 得到一个图像的方法
*/
public ImageDescriptor getImageDesc(String fileName) {
try {
URL url = new URL("file:icons/" + fileName);
return ImageDescriptor.createFromURL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
/**
* 自定义方法。生成六个Action对象,并通过工具栏管理器ToolBarManager填充进工具栏
*/
public void fillActionToolBars(ToolBarManager actionBarManager) {
//生成按钮,按钮就是一个个的Action
Action removeAction = new RemoveAction();
Action refreshAction = new RefreshAction();
Action firstAction = new FirstAction();
Action preAction = new PrevAction();
Action nextAction = new NextAction();
Action lastAction = new LastAction();
Action selAllAction = new SelectAllAction();
Action deselAction = new DeselectAction();
/*
* 将按钮通过工具栏管理器ToolBarManager填充进工具栏,如果用add(action)
* 也是可以的,只不过只有文字没有图像。要显示图像需要将Action包装成
* ActionContributionItem,在这里我们将包装的处理过程写成了一个方法。
*
*/
actionBarManager.add(createActionContributionItem(removeAction));
actionBarManager.add(createActionContributionItem(refreshAction));
actionBarManager.add(createActionContributionItem(firstAction));
actionBarManager.add(createActionContributionItem(preAction));
actionBarManager.add(createActionContributionItem(nextAction));
actionBarManager.add(createActionContributionItem(lastAction));
actionBarManager.add(createActionContributionItem(selAllAction));
actionBarManager.add(createActionContributionItem(deselAction));
//更新工具栏。没有这一句,工具栏上会没有任何显示
actionBarManager.update(true);
}
/**
* 将Action包装成ActionContributionItem类的方法。实际上Action加入到
* ToolBarManager或MenuManager里时,也做了ActionContributionItem的包装,
* 大家可以看它ToolBarManager的add(IAction)的源代码即知。
*/
ActionContributionItem createActionContributionItem(IAction action) {
ActionContributionItem aci = new ActionContributionItem(action);
aci.setMode(ActionContributionItem.MODE_FORCE_TEXT);//显示图像+文字
return aci;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -