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

📄 folderviewer.java

📁 Eclipse RCP下编写的工作管理软件代码
💻 JAVA
字号:
package net.sf.pim.mail.reader;import java.util.Arrays;import java.util.HashSet;import java.util.Map;import java.util.Set;import javax.mail.Folder;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.event.MessageCountEvent;import javax.mail.event.MessageCountListener;import jp.gr.java_conf.roadster.net.pop.POP3Message;import net.sf.pim.mail.MailPlugin;import net.sf.pim.mail.MailUtil;import net.sf.util.ConfigHelper;import net.sf.util.StringUtil;import org.eclipse.jface.viewers.IColorProvider;import org.eclipse.jface.viewers.ILazyContentProvider;import org.eclipse.jface.viewers.IStructuredContentProvider;import org.eclipse.jface.viewers.ITableLabelProvider;import org.eclipse.jface.viewers.LabelProvider;import org.eclipse.jface.viewers.StructuredSelection;import org.eclipse.jface.viewers.TableViewer;import org.eclipse.jface.viewers.Viewer;import org.eclipse.swt.SWT;import org.eclipse.swt.graphics.Color;import org.eclipse.swt.graphics.Image;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.Table;import org.eclipse.swt.widgets.TableColumn;import org.eclipse.ui.part.ViewPart;public class FolderViewer extends ViewPart {	public static final String ID = "MyWork_mail.listview";	private TableViewer viewer;	private Object[] messages; //邮箱内的邮件	private Folder folder;	//邮箱		private MessageCountAdapter adapter;	//监听器		private static Set<String> readSet=new HashSet<String>();	//已读邮件的标记		//邮件监听器	class MessageCountAdapter implements MessageCountListener {		private MessageCountAdapter() {		}		public void messagesAdded(final MessageCountEvent arg0) {			viewer.getTable().getDisplay().syncExec(new Runnable(){				public void run() {					refreshFolder(false);				}});		}		public void messagesRemoved(MessageCountEvent arg0) {			viewer.getTable().getDisplay().syncExec(new Runnable(){				public void run() {					refreshFolder(true);				}});		}	}	class ViewContentProvider implements ILazyContentProvider,IStructuredContentProvider {		public void inputChanged(Viewer v, Object oldInput, Object newInput) {		}		public void dispose() {		}		public Object[] getElements(Object parent) {			if (parent instanceof Message[]) {				return (Message[])parent;			} else				return new Object[0];		}		public void updateElement(int index) {			viewer.replace(messages[index], index);		}	}	class ViewLabelProvider extends LabelProvider implements			ITableLabelProvider,IColorProvider {		public String getColumnText(Object obj, int index) {			if (obj instanceof Message) {				try {					Message message = (Message) obj;					switch (index) {					case 0:						return "";					case 1:						return getSimpleFrom(MailUtil.getAddress(message.getFrom()));					case 2:						return message.getSubject();					case 3:						return MailUtil.getSentTime(message).substring(4);					}				} catch (MessagingException e) {					e.printStackTrace();				}				return "";			} else				return "";		}		public Image getColumnImage(Object obj, int index) {			return getImage(obj);		}		public Color getBackground(Object element) {			return null;		}		//只有收件箱显示未读		public Color getForeground(Object element) {			if(element instanceof POP3Message){				POP3Message message = ((POP3Message)element);				String key=message.getInternalFileName();				if(message.getFolder().getName().equals(MailPlugin.INBOX) && !readSet.contains(key)){					return Display.getCurrent().getSystemColor(SWT.COLOR_DARK_MAGENTA);				}			}			return null;		}	}	public void createPartControl(Composite parent) {		//2007.2.9 改为lazyload		viewer = new TableViewer(parent, SWT.SINGLE|SWT.FULL_SELECTION  | SWT.H_SCROLL| SWT.V_SCROLL |SWT.VIRTUAL);		//设置表头        Table table = viewer.getTable();        table.setHeaderVisible(true);        table.setLinesVisible(true);        String[] header=new String[]{"@","发件人","主题","接收时间"};        Map<String,String> headerSize=ConfigHelper.getHeaderSize(FolderViewer.class);        for (int i = 0; i < header.length; i++) {            TableColumn column = new TableColumn(table, SWT.NULL);            column.setText(header[i]);            column.setWidth(headerSize.get(header[i]) == null ? 60 : StringUtil.parseInt(headerSize.get(header[i])));        }		viewer.setContentProvider(new ViewContentProvider());		viewer.setLabelProvider(new ViewLabelProvider());		try {			showFolder(MailPlugin.getDefault().getStore().getFolder("INBOX"));			this.getSite().setSelectionProvider(viewer);			//初始不选中,等焦点			viewer.setSelection(new StructuredSelection());		} catch (Exception e) {			e.printStackTrace();		}	}		//显示一个邮箱	public void showFolder(final Folder folder) {		//清场,上一个邮箱		if(this.folder != null){			//相同邮箱不重复显示			if(this.folder.equals(folder))				return;						try {				this.folder.removeMessageCountListener(adapter);				if(this.folder.isOpen())					this.folder.close(true);			} catch (Exception e) {				e.printStackTrace();			}		}		this.folder=folder;		//收到新邮件时显示		adapter=new MessageCountAdapter();		folder.addMessageCountListener(adapter);		refreshFolder(false);	}		//取所有邮件	private Object[] getMessages(Folder folder) {		try {			if (!folder.isOpen())				folder.open(Folder.READ_WRITE);			Message[] messages = folder.getMessages();			return messages;		} catch (MessagingException e) {			e.printStackTrace();		}		return new Object[0];	}	/**	 * Passing the focus request to the viewer's control.	 */	public void setFocus() {		viewer.getControl().setFocus();		//缺省选中(显示)第一封邮件 2007.01.16修订超过邮件1页时滚动置位的bug		if(messages.length > 0 && viewer.getSelection().isEmpty()){			viewer.setSelection(new StructuredSelection(messages[0]));		}	}		//刷新邮箱	private void refreshFolder(boolean delete) {		//1.增加时选择项保持不变		//2.删除时选择索引保持不变		messages = getMessages(folder);		//2007.01.21 缺省用时间倒序显示		Arrays.sort(messages,new MessageComparator("Date",false));		viewer.setItemCount(messages.length);		viewer.getTable().clearAll();		if(delete){			int lastSelectIndex=viewer.getTable().getSelectionIndex();			if(lastSelectIndex == -1 && messages.length > 0 )				viewer.setSelection(new StructuredSelection(messages[messages.length-1]));			else				viewer.setSelection(viewer.getSelection());		}else{			if(messages.length >0)				viewer.setSelection(new StructuredSelection(messages[0]));		}				//刷新标题		setPartName(MailPlugin.convertFolderName(folder.getName())+"  邮件"+messages.length+"封");	}	//取当前显示的邮箱	public Folder getFolder() {		return folder;	}	public TableViewer getViewer() {		return viewer;	}	public static Set<String> getReadSet() {		return readSet;	}	public static void setReadSet(Set<String> readSet) {		FolderViewer.readSet = readSet;	}		//取发件人的简名,先取<,再截@,再判断首尾"	private static String getSimpleFrom(String from){		if(StringUtil.isNull(from))			return "";		if(from.indexOf('<') != -1){			from=from.substring(0,from.indexOf('<')).trim();		}		if(from.indexOf('@') != -1){			from=from.substring(0,from.indexOf('@')).trim();		}		if(from.length() >0 && from.charAt(0) == '"')			from=from.substring(1).trim();				if(from.length() >0 && from.charAt(from.length() -1) == '"')			from=from.substring(0,from.length()-1).trim();				return from;	}}

⌨️ 快捷键说明

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