?? jmail.java
字號:
package jws.awt.net;
// Copyright 1997, John Webster Small
// All rights Reserved
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import jws.net.*;
import jws.awt.event.*;
import jws.awt.*;
public class JMail extends WinFrame
{
private File saveState;
private ChoiceCardPanel folderViews;
private Hashtable folders;
private SMTPwConfig smtp;
private POP3wConfig pop3;
private PreviewEmailPanel preview;
private SMTPPOP3Config smtpPop3Config;
private final static String Inbox = "Inbox";
private final static String Outbox = "Outbox";
private final static String SentItems = "Sent Items";
private Button newMsgButton = new Button("New message");
private Button replyToButton = new Button("Reply to");
private Button replyToAllButton = new Button("Reply to all");
private Button forwardButton = new Button("Forward");
private Button sendXcvButton = new Button("Send & receive");
private Button deleteButton = new Button("Delete");
private Mailbox mailbox;
ItemListener enableButtonsListener;
final void sendXcv()
{
try {
Vector outbox = (Vector) folders.get(Outbox);
if (smtp.sendMail(this,outbox.elements())) {
for (int i = 0; i < outbox.size(); i++)
addToFolder(SentItems,(Email)outbox.elementAt(i));
outbox.removeAllElements();
((List) folderViews.getItem(Outbox)).removeAll();
}
Vector incoming = pop3.readMail(this,false);
for (int i = 0; i < incoming.size(); i++)
addToFolder(Inbox,(Email)incoming.elementAt(i));
} catch (Exception e) {
new WinFrame("Sending and Receiving Email",e);
}
}
private final void enableButton(Button b, boolean enabled)
{
if (b.isEnabled() != enabled)
b.setEnabled(enabled);
}
final void enableButtons()
{
Email email = getSelectedEmail();
preview.preview(email);
if (email == null) {
enableButton(replyToButton,false);
enableButton(replyToAllButton,false);
enableButton(forwardButton,false);
enableButton(deleteButton,false);
}
else {
String folder = folderViews.getSelectedItem();
if (folder.equals(Outbox)) {
enableButton(replyToButton,false);
enableButton(replyToAllButton,false);
enableButton(forwardButton,true);
enableButton(deleteButton,true);
}
else {
enableButton(replyToButton,true);
enableButton(replyToAllButton,true);
enableButton(forwardButton,true);
enableButton(deleteButton,true);
}
}
invalidate();
}
final public Email getSelectedEmail()
{
try {
int folderIdx = folderViews.getSelectedIndex();
List folderList = (List) folderViews.getItem(folderIdx);
int folderListIdx = folderList.getSelectedIndex();
String folder = folderViews.getSelectedItem();
Vector letters = (Vector) folders.get(folder);
return (Email) letters.elementAt(folderListIdx);
} catch (Exception e) { }
return null;
}
final public void viewSelectedEmail()
{
Email email = getSelectedEmail();
if (email == null)
return;
if (folderViews.getSelectedItem().equals(Outbox))
new ComposeEmail(email.getSubject(),mailbox,email)
.setVisible(true);
else
new ViewEmail(mailbox,email).setVisible(true);
}
final protected void addFolder(String folder)
{
if (!folders.containsKey(folder)) {
List letterList = new List();
letterList.addActionListener
(
new ActionAdapter()
{
public void actionPerformed(ActionEvent e)
{ viewSelectedEmail(); }
}
);
letterList.addItemListener(enableButtonsListener);
folderViews.add(folder, letterList);
folders.put(folder,new Vector());
}
}
final protected void removeFolder(String folder)
{
if (folders.containsKey(folder)
&& !folder.equals(Inbox)
&& !folder.equals(Outbox)
&& !folder.equals(SentItems)) {
folderViews.remove(folder);
folders.remove(folders.get(folder));
}
}
private final static String spaces = new String
(" ");
private final static void appendField
(StringBuffer out, String field, int width)
{
if (field.length() < width) {
out.append(field);
out.append(spaces.substring(0,width-field.length()));
}
else
out.append(field.substring(0,width));
}
final public void addToFolder
(String folder, Email email)
{
if (!folders.containsKey(folder))
addFolder(folder);
if (folders.containsKey(folder)) {
List letterList = (List) folderViews.getItem(folder);
Vector letters = (Vector) folders.get(folder);
if (letters.contains(email)) {
int letterIdx = letters.indexOf(email);
letters.removeElementAt(letterIdx);
letterList.remove(letterIdx);
}
letters.addElement(email);
StringBuffer item = new StringBuffer();
if (folder.equals(Outbox)
|| folder.equals(SentItems))
appendField(item,email.getToAsString(),30);
else
appendField(item,email.getFrom(),30);
appendField(item,email.getSubject(),30);
appendField(item,email.getDate(),30);
letterList.add(item.toString());
}
}
final private void addFolders(Hashtable folders)
{
Enumeration folderNames = folders.keys();
while (folderNames.hasMoreElements()) {
String folderName = (String) folderNames.nextElement();
addFolder(folderName);
Enumeration letters = ((Vector)folders.get(folderName)).elements();
while (letters.hasMoreElements())
addToFolder(folderName,(Email)letters.nextElement());
}
}
public void removeFromFolder
(String folder, Email email)
{
if (folders.containsKey(folder)) {
List letterList = (List) folderViews.getItem(folder);
Vector letters = (Vector) folders.get(folder);
if (letters.contains(email)) {
int letterIdx = letters.indexOf(email);
letters.removeElementAt(letterIdx);
letterList.remove(letterIdx);
}
}
}
public void deleteEmail()
{
try {
int folderIdx = folderViews.getSelectedIndex();
List letterList = (List) folderViews.getItem(folderIdx);
int letterIdx = letterList.getSelectedIndex();
String folder = folderViews.getSelectedItem();
Vector letters = (Vector) folders.get(folder);
letters.removeElementAt(letterIdx);
letterList.remove(letterIdx);
enableButtons();
} catch (Exception e) {
new WinFrame("Deleting mail",e);
}
}
private void init(File saveState)
{
this.saveState = saveState;
enableButtonsListener =
new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{ enableButtons(); }
};
folderViews = new ChoiceCardPanel("Folders");
folderViews.addItemListener(enableButtonsListener);
folders = new Hashtable();
boolean restored = false;
if (saveState.exists())
try {
FileInputStream fis = new FileInputStream(saveState);
ObjectInputStream ois = new ObjectInputStream(fis);
smtp = (SMTPwConfig) ois.readObject();
pop3 = (POP3wConfig) ois.readObject();
Hashtable savedFolders = (Hashtable) ois.readObject();
ois.close();
addFolders(savedFolders);
restored = true;
} catch (Exception e) {
new WinFrame("Restoring JMail state",e);
}
if (!restored) {
addFolder(Inbox);
addFolder(Outbox);
addFolder(SentItems);
smtp = new SMTPwConfig();
pop3 = new POP3wConfig();
}
smtpPop3Config = new SMTPPOP3Config(smtp,pop3);
mailbox = new Mailbox()
{
public void post(Email email)
{ addToFolder(Outbox,email); }
public String getFrom()
{ return smtp.getSenderEmailAddress(JMail.this); }
};
Panel p = new Panel();
p.add(newMsgButton);
newMsgButton.addActionListener
(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
new ComposeEmail
("New Message",mailbox).setVisible(true);
}
}
);
p.add(replyToButton);
p.add(replyToAllButton);
p.add(forwardButton);
p.add(sendXcvButton);
p.add(deleteButton);
add("North",p);
add("Center",new InsetPanel(10,10,10,10,folderViews));
preview = new PreviewEmailPanel(4,10);
add("South",new InsetPanel(10,10,10,10,preview));
pack();
sendXcvButton.addActionListener
(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
sendXcv();
}
}
);
deleteButton.addActionListener
(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{ deleteEmail(); }
}
);
replyToButton.addActionListener
(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Email em = getSelectedEmail()
.replyTo(JMail.this);
new ComposeEmail(em.getSubject(),
mailbox,em).setVisible(true);
}
}
);
replyToAllButton.addActionListener
(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Email em = getSelectedEmail()
.replyToAll(JMail.this);
new ComposeEmail(em.getSubject(),
mailbox,em).setVisible(true);
}
}
);
forwardButton.addActionListener
(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Email em = getSelectedEmail()
.forward();
new ComposeEmail(em.getSubject(),
mailbox,em).setVisible(true);
}
}
);
enableButtons();
MenuBar mb = new MenuBar();
Menu m = new Menu("Mail");
MenuItem mi = new MenuItem("Options");
mi.addActionListener
(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{ smtpPop3Config.configure(JMail.this,"JMail"); }
}
);
m.add(mi);
mb.add(m);
m = new Menu("Help");
mi = new MenuItem("Feedback");
mi.addActionListener
(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Email em = new Email(
"To: jsmall@laser.net\n" +
"Subject: JMail tech support\n\n" +
"Please send me your questions, comments, suggestions!");
new ComposeEmail(em.getSubject(),
mailbox,em).setVisible(true);
}
}
);
m.add(mi);
mi = new MenuItem("About");
mi.addActionListener
(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
final WinDialog wd =
new WinDialog(JMail.this,"About",true);
Panel ap = new Panel();
ap.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridwidth = GridBagConstraints.REMAINDER;
ap.add(new Label("JMail 1.1.3.01"),c);
ap.add(new Label("100% Pure Java (tm)"),c);
ap.add(new Label("Mail Client"),c);
wd.add("Center",new InsetPanel(10,10,10,10,ap));
Button ok = new Button("Ok");
ap = new Panel();
ap.add(ok);
wd.add("South",ap);
ok.addActionListener
(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{ wd.dispose(); }
}
);
wd.pack();
wd.setVisible(true);
}
}
);
m.add(mi);
mb.add(m);
setMenuBar(mb);
}
public JMail(File saveState)
{
super(saveState.getName());
init(saveState);
}
public JMail(String pathname)
{
this(new File(pathname));
}
public void save()
{
try {
FileOutputStream fos = new FileOutputStream(saveState);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(smtp);
oos.writeObject(pop3);
oos.writeObject(folders);
oos.close();
} catch (Exception e) {
new WinFrame("JMail saving state",e);
}
}
public void dispose()
{
save();
super.dispose();
}
public static void main(String[] args)
{
try {
new JMail(args[0]).appMainWindow().setVisible(true);
} catch (Exception e) {
new JMail("JMail").appMainWindow().setVisible(true);
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -