📄 navigatorview.java
字号:
package com.zdh.sms.navigator;
import java.util.List;
import org.eclipse.jface.dialogs.MessageDialog;
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.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.part.ViewPart;
import com.zdh.sms.ILogoffListener;
import com.zdh.sms.SearchView;
import com.zdh.sms.model.ITreeEntry;
import com.zdh.sms.navigator.NavigatorEntry;
import com.zdh.sms.system.Context;
import com.zdh.sms.system.LabelProviderAdapter;
import com.zdh.sms.system.SmsFactory;
import com.zdh.sms.system.TreeContentProviderAdapter;
public class NavigatorView extends ViewPart implements ILogoffListener {// 增加了一个接口
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 MyActionGroup().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("成绩管理")) {
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();
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -