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

📄 navigatorview.java

📁 学生成绩管理系统
💻 JAVA
字号:
package cn.com.chengang.sms.navigator;

import java.io.PrintStream;
import java.lang.reflect.InvocationTargetException;
import java.util.List;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.IConsoleManager;
import org.eclipse.ui.console.MessageConsole;
import org.eclipse.ui.console.MessageConsoleStream;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.ui.progress.IProgressService;

import cn.com.chengang.sms.model.ITreeEntry;
import cn.com.chengang.sms.score.SearchView;
import cn.com.chengang.sms.system.Context;
import cn.com.chengang.sms.system.ILogonListener;
import cn.com.chengang.sms.system.LabelProviderAdapter;
import cn.com.chengang.sms.system.SmsFactory;
import cn.com.chengang.sms.system.TreeContentProviderAdapter;

public class NavigatorView extends ViewPart implements ILogonListener {//增加了一个接口
	private TreeViewer tv;
	private Context ctx = Context.getInstance();

	public void createPartControl(Composite parent) {
		Composite topComp = new Composite(parent, SWT.NONE);
		topComp.setLayout(new FillLayout());
		tv = new TreeViewer(topComp, SWT.NONE);
		tv.setContentProvider(new MyContentProvider());// 内容器
		tv.setLabelProvider(new MyLableProvider());// 标签器
		//如果已经登录才显示功能结点树
		if (ctx.isLogon())
			tv.setInput(SmsFactory.createNavigatorEntryTree());
		// 加入导航栏按钮
		IActionBars bars = getViewSite().getActionBars();
		new NavigatorActionGroup().fillActionBars(bars);
		// 注册到Context类
		ctx.addLogonListener(this);
		tv.addDoubleClickListener(new MyDoubleClickListener());
	}

	//实现退出监听器的登录事件处理方法--设置视图的结点树
	public void logon() {
		tv.setInput(SmsFactory.createNavigatorEntryTree());
	}

	// 实现退出监听器的退出事件处理方法——将视图的结点树清空
	public void logoff() {
		tv.setInput(null);
	}

	// 改写父类的注销方法。当关闭视图时将自身从Context类中注销掉
	public void dispose() {
		ctx.removeLogonListener(this);
		super.dispose();
	}

	public void setFocus() {}

	// 标签器
	private static final class MyLableProvider extends LabelProviderAdapter {
		public String getText(Object element) {
			return ((ITreeEntry) element).getName();
		}

		public Image getImage(Object element) {
			return ((NavigatorEntry) element).getImage();
		}
	}

	// 内容器
	private static final class MyContentProvider extends TreeContentProviderAdapter {
		public Object[] getElements(Object inputElement) {
			if (inputElement instanceof List) {
				return ((List) inputElement).toArray();
			} else {
				return new Object[0]; // 生成一个空数组
			}
		}

		public boolean hasChildren(Object element) {
			ITreeEntry entry = (ITreeEntry) element;
			return !entry.getChildren().isEmpty(); // 注意前面有个取反的感叹号
		}

		public Object[] getChildren(Object parentElement) {
			ITreeEntry entry = (ITreeEntry) parentElement;
			return entry.getChildren().toArray();
		}
	}
	
	private class MyDoubleClickListener implements IDoubleClickListener {
		public void doubleClick(DoubleClickEvent event) {
			IStructuredSelection sel = (IStructuredSelection) event.getSelection();
			NavigatorEntry entry = (NavigatorEntry) sel.getFirstElement();
			if (entry.getName().equals("报表输出")) {
				doJob3();// 改为doJob2()、doJob3()可以看其他实例的效果
			} else if (entry.getName().equals("成绩管理")) {
				try {
					String viewId = SearchView.class.getName();
					IWorkbenchPage workbenchPage = getViewSite().getPage();
					// 该方法的返回值是SearchView对象,它会自动判断视图是否已经打开,
					// 如果没有则创建视图,这时会执行视图类的createPartControl方法
					workbenchPage.showView(viewId);
				} catch (PartInitException e) {
					e.printStackTrace();
				}
			} else {
				IEditorInput editorInput = entry.getEditorInput();
				String editorID = entry.getEditorId();
				// 如果editorInput或editorID为空则中断返回
				if (editorInput == null || editorID == null)
					return;
				// 取得IWorkbenchPage,并搜索使用editorInput对象对应的编辑器
				IWorkbenchPage workbenchPage = getViewSite().getPage();
				IEditorPart editor = workbenchPage.findEditor(editorInput);
				// 如果此编辑器已经存在,则将它设为当前编辑器,否则重新打开一个编辑器
				if (editor != null) {
					workbenchPage.bringToTop(editor);
				} else {
					try {
						editor = workbenchPage.openEditor(editorInput, editorID);
					} catch (PartInitException e2) {
						e2.printStackTrace();
					}
				}
			}
		}
	}

	// 进度条实例1
	private void doJob1() {
		Job job = new Job("我正忙着,别烦我...") {
			protected IStatus run(IProgressMonitor monitor) {
				try {
					System.out.println("发呆中...");
					Thread.sleep(10000);// 模拟一个需要10秒的工作
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				return Status.OK_STATUS;
			}
		};
		job.setPriority(Job.SHORT);// 设置优先级,默认为Job.LONG
		// job.setSystem(true);//在后台默默的运行(无进度界面)
		job.setUser(true);// 显示进度界面(默认)
		job.schedule(); // 执行任务
		System.out.println("听听音乐");
	}

	// 进度条实例2
	private void doJob2() {
		final Job job = new Job("我正忙着,别烦我...") {
			protected IStatus run(IProgressMonitor monitor) {
				try {
					for (int i = 0; i < 5; i++) {
						try {
							Thread.sleep(1000);
							System.out.println("完成工作" + i);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
						if (monitor.isCanceled())
							return Status.CANCEL_STATUS;
					}
					return Status.OK_STATUS;
				} finally {
					schedule(10000); // 10秒钟后再次运行
				}
			}
		};
		job.addJobChangeListener(new JobChangeAdapter() {
			public void done(IJobChangeEvent event) {
				if (event.getResult().isOK())
					System.out.println("工作完成");
				else
					System.out.println("工作没有完成");
			}
		});
		job.schedule();
	}

	// 进度条实例3
	private void doJob3() {
		IProgressService progressService = PlatformUI.getWorkbench().getProgressService();
		IRunnableWithProgress runnable = new IRunnableWithProgress() {
			public void run(IProgressMonitor monitor) {
				monitor.beginTask(null, 5);
				for (int i = 0; i < 5; i++) {
					try {
						Thread.sleep(100);
						monitor.setTaskName("完成工作" + i);
						monitor.worked(1);
						getViewSite().getShell().setText("完成工作" + i); // 访问另一个线程的界面
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				monitor.done();
			}
		};
		try {
			progressService.runInUI(progressService, runnable, null);
			// progressService.busyCursorWhile(runnable);
		} catch (InvocationTargetException e1) {
			e1.printStackTrace();
		} catch (InterruptedException e1) {
			e1.printStackTrace();
		}
	}

	private void console() {
		IConsoleManager mgr = ConsolePlugin.getDefault().getConsoleManager();// 得到控制台管理器
		{
			MessageConsole console = new MessageConsole("myconsole1", null);// 创建一个输出页
			mgr.addConsoles(new IConsole[] { console });// 将输出页加入到控制台视图
			mgr.showConsoleView(console);// 在控制台视图里显示输出页
			// 创建一个输出页的输出流,设置它的字体颜色,然后输出显示
			MessageConsoleStream stream = console.newMessageStream();
			stream.setColor(Display.getDefault().getSystemColor(SWT.COLOR_RED));
			stream.println("Eclipse从入门到精通");
		}
		{
			MessageConsole console = new MessageConsole("myconsole2", null);
			mgr.addConsoles(new IConsole[] { console });
			mgr.showConsoleView(console);
			// 创建一个输出页的输出流,设置它的字体颜色,然后输出显示
			MessageConsoleStream stream = console.newMessageStream();
			System.setOut(new PrintStream(stream));//将System.out的输出信息转到控制台
			stream.println("陈刚");
			System.out.println("清华大学出版社");
		}
	}

	private void logconsole(){
		MessageConsole console=LogConsoleFactory.getConsole();
		MessageConsoleStream stream = console.newMessageStream();
		stream.println("Eclipse从入门到精通");
	}
	
	private void clearConsole(){
		LogConsoleFactory.getConsole().clearConsole();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -