📄 viewpanel.java
字号:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import java.util.Vector;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeUtility;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
public class ViewPanel extends JPanel {
private javax.swing.JSplitPane jSplitPane = null;
private javax.swing.JScrollPane jsprecieveTree = null;
private javax.swing.JScrollPane jspsaveTree = null;
private javax.swing.JTextField textShowFrom = null;
private javax.swing.JTextField textShowTo = null;
private javax.swing.JTextField textShowSubject = null;
private javax.swing.JTextField textShowEnclosure = null;
private javax.swing.JScrollPane jspShowText = null;
private javax.swing.JTextField textShowDate = null;
private javax.swing.JTextArea jtaShowText = null;
private javax.swing.JButton jbtnRecieve = null;
private javax.swing.JProgressBar jprgbRecieve = null;
Vector recieveVector = new Vector();
Vector saveVector = new Vector();
//JTree recieveTree;
JTree recieveTree = null;
DefaultMutableTreeNode recieveNode; // recieveTree root
DefaultTreeModel recieveModel;
DefaultMutableTreeNode node;
//JTree saveTree;
JTree saveTree = null;
DefaultMutableTreeNode saveNode; //sendTree root or rather saveTree root
DefaultTreeModel saveModel;
MessageProcess processM = new MessageProcess();
/**/
public ViewPanel() {
super();
initialize();
}
/**/
private void initialize() {
recieveNode = new DefaultMutableTreeNode("Mail Box");
recieveModel = new DefaultTreeModel(recieveNode);
recieveTree = new JTree(recieveModel);
recieveTree.setEditable(false);
recieveTree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
recieveTree.setShowsRootHandles(true);
recieveTree.addTreeSelectionListener(new recieveTreeListener());
saveNode = new DefaultMutableTreeNode("Saved Mail");
saveModel = new DefaultTreeModel(saveNode);
saveTree = new JTree(saveModel);
saveTree.setEditable(false);
saveTree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
saveTree.setShowsRootHandles(true);
saveTree.addTreeSelectionListener(new saveTreeListener());
this.setLayout(null);
this.add(getJSplitPane(), null);
this.add(getTextShowFrom(), null);
this.add(getTextShowTo(), null);
this.add(getTextShowSubject(), null);
this.add(getTextShowEnclosure(), null);
this.add(getJspShowText(), null);
this.add(getTextShowDate(), null);
this.add(getJbtnRecieve(), null);
this.add(getJprgbRecieve(), null);
this.setSize(384, 385);
}
/**/
private javax.swing.JSplitPane getJSplitPane() {
if (jSplitPane == null) {
jSplitPane = new javax.swing.JSplitPane();
jSplitPane.setTopComponent(getJsprecieveTree());
jSplitPane.setBottomComponent(getJspsaveTree());
jSplitPane.setBounds(20, 10, 110, 250);
jSplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
jSplitPane.setDividerSize(8);
jSplitPane.setDividerLocation(130);
}
return jSplitPane;
}
/**/
private javax.swing.JScrollPane getJsprecieveTree() {
if (jsprecieveTree == null) {
jsprecieveTree = new javax.swing.JScrollPane();
jsprecieveTree.setViewportView(getRecieveTree());
}
return jsprecieveTree;
}
/**/
private javax.swing.JScrollPane getJspsaveTree() {
if (jspsaveTree == null) {
jspsaveTree = new javax.swing.JScrollPane();
jspsaveTree.setViewportView(getSaveTree());
}
return jspsaveTree;
}
/**/
javax.swing.JTree getRecieveTree() {
return recieveTree;
}
/**/
javax.swing.JTree getSaveTree() {
return saveTree;
}
/**/
private javax.swing.JTextField getTextShowFrom() {
if (textShowFrom == null) {
textShowFrom = new javax.swing.JTextField();
textShowFrom.setBounds(166, 13, 194, 24);
textShowFrom.setText("From:");
textShowFrom.setEditable(false);
textShowFrom.setName("textShowFrom");
textShowFrom.setForeground(java.awt.SystemColor.textHighlight);
textShowFrom.setBackground(java.awt.Color.pink);
}
return textShowFrom;
}
/**/
private javax.swing.JTextField getTextShowTo() {
if (textShowTo == null) {
textShowTo = new javax.swing.JTextField();
textShowTo.setBounds(166, 39, 194, 24);
textShowTo.setEditable(false);
textShowTo.setForeground(java.awt.SystemColor.textHighlight);
textShowTo.setText("To:");
textShowTo.setBackground(java.awt.Color.pink);
}
return textShowTo;
}
/**/
private javax.swing.JTextField getTextShowSubject() {
if (textShowSubject == null) {
textShowSubject = new javax.swing.JTextField();
textShowSubject.setBounds(166, 65, 194, 24);
textShowSubject.setBackground(java.awt.Color.pink);
textShowSubject.setEditable(false);
textShowSubject.setForeground(java.awt.SystemColor.textHighlight);
textShowSubject.setText("Subject:");
}
return textShowSubject;
}
/**/
private javax.swing.JTextField getTextShowEnclosure() {
if (textShowEnclosure == null) {
textShowEnclosure = new javax.swing.JTextField();
textShowEnclosure.setBounds(166, 117, 194, 24);
textShowEnclosure.setForeground(java.awt.SystemColor.textHighlight);
textShowEnclosure.setEditable(false);
textShowEnclosure.setBackground(java.awt.Color.pink);
textShowEnclosure.setText("Enclosure:");
}
return textShowEnclosure;
}
/**/
private javax.swing.JScrollPane getJspShowText() {
if (jspShowText == null) {
jspShowText = new javax.swing.JScrollPane();
jspShowText.setViewportView(getJtaShowText());
jspShowText.setBounds(146, 147, 220, 196);
}
return jspShowText;
}
/**/
private javax.swing.JTextField getTextShowDate() {
if (textShowDate == null) {
textShowDate = new javax.swing.JTextField();
textShowDate.setBounds(166, 91, 194, 24);
textShowDate.setBackground(java.awt.Color.pink);
textShowDate.setEditable(false);
textShowDate.setForeground(java.awt.SystemColor.textHighlight);
textShowDate.setText("Date:");
}
return textShowDate;
}
/**/
private javax.swing.JTextArea getJtaShowText() {
if (jtaShowText == null) {
jtaShowText = new javax.swing.JTextArea();
jtaShowText.setForeground(java.awt.SystemColor.textHighlight);
jtaShowText.setEditable(true);
jtaShowText.setBackground(java.awt.Color.pink);
}
return jtaShowText;
}
/**/
private javax.swing.JButton getJbtnRecieve() {
if (jbtnRecieve == null) {
jbtnRecieve = new javax.swing.JButton();
jbtnRecieve.setBounds(34, 291, 85, 22);
jbtnRecieve.setText("Recieve");
jbtnRecieve.addActionListener(new recieveAction());
}
return jbtnRecieve;
}
/**/
private javax.swing.JProgressBar getJprgbRecieve() {
if (jprgbRecieve == null) {
jprgbRecieve = new javax.swing.JProgressBar();
jprgbRecieve.setBounds(24, 353, 340, 20);
}
return jprgbRecieve;
}
class Wait implements Serializable {
Timer timer = new Timer(200, new Action());
int value = 5;
public Wait() {
}
public void Start() {
timer.start();
}
public void Stop() {
timer.stop();
jprgbRecieve.setValue(0);
}
class Action implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (value >= 200)
value = 3;
jprgbRecieve.setValue(value);
value += 1;
}
}
}
class recieveTreeListener implements TreeSelectionListener, Serializable {
DefaultMutableTreeNode node;
int index = -1;
public void valueChanged(TreeSelectionEvent e) {
node =
(DefaultMutableTreeNode) recieveTree
.getLastSelectedPathComponent();
for (int i = 0; i < recieveNode.getChildCount(); i++)
if (node
== (DefaultMutableTreeNode) recieveNode.getChildAt(i)) {
index = i;
break;
}
if (index >= 0) {
textShowFrom.setText("From: "+
findEmailAddress(
((MessageDS) (recieveVector.elementAt(index)))
.getAddress()));
textShowSubject.setText("Subject: "+
((MessageDS) (recieveVector.elementAt(index)))
.getSubject());
textShowEnclosure.setText("Enclosure: "+
((MessageDS) (recieveVector.elementAt(index)))
.getEnclosure());
textShowDate.setText(
"Date: "
+ ((MessageDS) (recieveVector.elementAt(index)))
.getRecievedDate()
+ "");
// System.out.println(((MyMessage)(recieveVector.elementAt(index))).getAttachment());
jtaShowText.setText(
((MessageDS) (recieveVector.elementAt(index)))
.getContent());
}
}
}
//TreeSelectionListener for sendTree
class saveTreeListener implements TreeSelectionListener, Serializable {
DefaultMutableTreeNode node;
int index = -1;
//对接保存的message 的树视图的操作的响应 选定值改变时要完成相应的视图更新
public void valueChanged(TreeSelectionEvent e) {
node =
(DefaultMutableTreeNode) saveTree
.getLastSelectedPathComponent();
//用循环完成查找相应选中的object对应的index以便从消息队列数组中
//找出相应的内容来完成视图的更新
for (int i = 0; i < saveNode.getChildCount(); i++)
{
if (node == (DefaultMutableTreeNode) saveNode.getChildAt(i))
{
index = i;
break;
}
}
if (index >= 0)
{
textShowTo.setText(
"To: "
+ ((MessageDS) (saveVector.elementAt(index)))
.getAddress());
textShowSubject.setText(
"Subject: "
+ ((MessageDS) (saveVector.elementAt(index)))
.getSubject());
textShowEnclosure.setText(
"Enclosure: "
+ ((MessageDS) (saveVector.elementAt(index)))
.getEnclosure());
textShowDate.setText(
"Date: "
+ ((MessageDS) (saveVector.elementAt(index)))
.getRecievedDate()
+ "");
jtaShowText.setText(
((MessageDS) (saveVector.elementAt(index))).getContent());
}
}
}
Wait wait = new Wait();
class recieveAction implements ActionListener, Serializable {
public void actionPerformed(ActionEvent e) {
wait.Start();
System.out.println(" recieve button down");
(new recieveThread()).start();
}
}
class recieveThread extends Thread implements Serializable {
String Server =
"pop3://"
+ Configuration.getAccount()
+ ":"
+ Configuration.getPassword()
+ "@"
+ Configuration.getPOP3()
+ "/INBOX";
public void run() {
URLName ServerUrlName = new URLName(Server);
System.out.println(ServerUrlName.toString());
Properties props = new Properties();
try {
Session session = Session.getDefaultInstance(props, null);
Folder folder = session.getFolder(ServerUrlName);
System.out.println(folder.toString());
if (folder == null) {
JOptionPane.showMessageDialog(
null,
"Sorry,找不到所要的文件夹:" + Server);
} else {
folder.open(Folder.READ_WRITE);
System.out.println(" folder open");
Message[] messages = folder.getMessages();
System.out.println(messages.length);
if (messages.length == 0)
{
JOptionPane.showMessageDialog(null, "在你的邮箱里没有新的邮件!");
folder.close(false);
}
else
{
for (int i = 0; i < messages.length; i++) {
MessageDS messageDS = new MessageDS();
messageDS.setAddress(
InternetAddress.toString(
messages[i].getFrom()));
messageDS.setSubject(getsubject(messages[i]));
messageDS.setRecievedDate(
messages[i].getSentDate());
messageDS.setIsHtml(false);
Object body = messages[i].getContent();
if (body instanceof Multipart) {
processM.multipartProcess(
(Multipart) body,
messageDS,
recieveVector);
} else {
processM.partProcess(
messages[i],
messageDS,
recieveVector);
}
recieveVector.addElement(messageDS);
//接收到的邮件 要添加到收件箱 同时更新视图
DefaultMutableTreeNode messageNode =
new DefaultMutableTreeNode(
recieveVector.size()
+ "."
+ findEmailAddress(
messageDS.getAddress()));
//动态增长的 节点字符串 :)
System.out.println(
"recieve complete , begin to update treeview");
recieveModel.insertNodeInto(
messageNode,
recieveNode,
recieveNode.getChildCount());
System.out.println("step 1");
//Display Path dynamicly when Node inserting
recieveTree.scrollPathToVisible(
new TreePath(messageNode.getPath()));
messages[i].setFlag(Flags.Flag.DELETED, false);
System.out.println("step 2");
}
folder.close(true); //Delete messages with this flag
}
}
wait.Stop();
JOptionPane.showMessageDialog(null, " Mail recieved Ok!");
} catch (Exception MessageE) {
wait.Stop();
JOptionPane.showMessageDialog(
null,
"Error:" + MessageE.getMessage());
}
} //run end
} //recieveThread end
//ISO8859-1 编码标准
public String getstr(String str) {
try {
String temp_p = str;
byte[] temp_t = temp_p.getBytes("ISO8859-1");
String temp = new String(temp_t);
return temp;
} catch (Exception e) {
return str;
}
}
public String getsubject(Message m) throws Exception {
boolean bgetstr; //Need to be encode to certain ISO or not
String temps;
String[] ta1 = m.getHeader("Subject");
String _subject;
if (ta1 != null)
_subject = ta1[0];
else
_subject = "";
if (_subject.indexOf("=?gb2312") != -1
|| _subject.indexOf("=?GBK") != -1
|| _subject.indexOf("=?utf-8") != -1)
bgetstr = false;
else
bgetstr = true;
try {
//Decode "subject" or masses
temps = MimeUtility.decodeText(_subject);
} catch (UnsupportedEncodingException E) {
return _subject;
}
if (temps.length() == 0) {
temps = "(无主题)";
bgetstr = false;
}
if (bgetstr == false)
return temps; // need
else
return getstr(temps); //dosen't need
}
//获取邮件来源地址
public String findEmailAddress(String str) {
try {
int foreindex = str.indexOf("<");
int backindex = str.indexOf(">");
if (foreindex != -1 && backindex != -1)
str = str.substring(foreindex + 1, backindex);
return str;
} catch (Exception e) {
return str;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -