⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myactiongroup.java

📁 SWTJFace篇项目源程序该项目包含 包含了Eclipse下构建swt的基本工程
💻 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 + -