mailclient.java
来自「< Professional Java,JDK 5 Edition>」· Java 代码 · 共 285 行
JAVA
285 行
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.tree.*;
import java.util.*;
import javax.swing.SwingConstants;
class MessageTableModel extends AbstractTableModel {
public String[] colNames = {"From", "Subject"};
public Class[] colTypes = {String.class, String.class, String.class};
public Vector<String[]> data;
public MessageTableModel()
{
super();
data = new Vector<String[]>();
}
public int getColumnCount()
{
return(colNames.length);
}
public int getRowCount()
{
return(data.size());
}
public String getColumnName(int col)
{
return(colNames[col]);
}
public Class getColumnClass(int col)
{
return(colTypes[col]);
}
public Object getValueAt(int row, int col)
{
String strArray[] = data.elementAt(row);
return(strArray[col]);
}
public void addMessage(String from, String subj)
{
data.add(new String[]{from,subj});
fireTableDataChanged();
}
}
public class MailClient extends JFrame implements ActionListener {
private JPanel mainPanel;
private JTree folderTree;
private JTable messageTable;
private MessageTableModel tableModel;
private JMenuBar menuBar;
private CardLayout cardLayout;
private JMenuItem sendMailItem;
private JMenuItem readMailItem;
private JMenuItem quitApp;
private JNIMailBridge mailLibrary;
private JTextField toAddressTF, subjectTF;
private JTextArea sendMsgBodyTA, readMsgBodyTA;
private JButton sendMailButton;
private String currentFolderName="";
public MailClient(String title)
{
super(title);
mailLibrary = new JNIMailBridge();
loadMailFolders();
}
private void sendMail()
{
mailLibrary.sendMail("Outlook", toAddressTF.getText(),
subjectTF.getText(), sendMsgBodyTA.getText());
}
private JPanel createSendMailPanel()
{
JLabel toLabel, subjLabel, bodyLabel;
JPanel sendMailPanel, topPanel, bottomPanel;
sendMailPanel = new JPanel(new BorderLayout());
bottomPanel = new JPanel(new BorderLayout());
topPanel = new JPanel(new GridBagLayout());
sendMailButton = new JButton("Send Mail");
sendMailButton.addActionListener(this);
toLabel = new JLabel("To: ");
toLabel.setHorizontalAlignment(SwingConstants.RIGHT);
subjLabel = new JLabel("Subject: ");
subjLabel.setHorizontalAlignment(SwingConstants.RIGHT);
bodyLabel = new JLabel("Message Text");
toAddressTF = new JTextField(30);
subjectTF = new JTextField(30);
sendMsgBodyTA = new JTextArea(10, 40);
GridBagConstraints c = new GridBagConstraints();
c.gridx = 0;
c.gridy = 0;
c.anchor = GridBagConstraints.LINE_END;
topPanel.add(toLabel, c);
c.gridx = 1;
c.gridy = 0;
c.anchor = GridBagConstraints.LINE_START;
topPanel.add(toAddressTF, c);
c.gridx = 0;
c.gridy = 1;
c.anchor = GridBagConstraints.LINE_END;
topPanel.add(subjLabel, c);
c.gridx = 1;
c.gridy = 1;
c.anchor = GridBagConstraints.LINE_START;
topPanel.add(subjectTF, c);
c.gridx = 2;
c.gridy = 0;
c.gridheight = 2;
c.anchor = GridBagConstraints.CENTER;
topPanel.add(sendMailButton, c);
c.gridx = 0;
c.gridy = 3;
c.gridwidth = 2;
bottomPanel.add(bodyLabel, BorderLayout.PAGE_START);
bottomPanel.add(new JScrollPane(sendMsgBodyTA), BorderLayout.CENTER);
sendMailPanel.add(topPanel, BorderLayout.PAGE_START);
sendMailPanel.add(bottomPanel, BorderLayout.CENTER);
return(sendMailPanel);
}
private JPanel createReadMailPanel()
{
JSplitPane splitPaneHoriz, splitPaneVert;
JScrollPane scrollPaneTable, scrollPaneText;
JPanel eastPanel = new JPanel(new BorderLayout());
JPanel westPanel = new JPanel(new BorderLayout());
JPanel readPanel = new JPanel(new BorderLayout());
readMsgBodyTA = new JTextArea(10, 40);
String colNames[] = {"From", "To", "Subject", "Body"};
tableModel = new MessageTableModel();
messageTable = new JTable(tableModel);
scrollPaneTable = new JScrollPane(messageTable);
scrollPaneText = new JScrollPane(readMsgBodyTA);
messageTable.addMouseListener(
new MouseAdapter() {
public void mousePressed(MouseEvent e) {
int selRow = messageTable.rowAtPoint(new java.awt.Point(e.getX(), e.getY()));
if(selRow != -1) {
if(e.getClickCount() == 2) {
MailFolder folder = mailLibrary.findFolder(currentFolderName);
readMsgBodyTA.setText(folder.getMessage(selRow).body);
}
}
}
}
);
splitPaneVert = new JSplitPane(JSplitPane.VERTICAL_SPLIT, scrollPaneTable, scrollPaneText);
splitPaneHoriz = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, new JScrollPane(folderTree), splitPaneVert);
readPanel.add(splitPaneHoriz);
return(readPanel);
}
public void actionPerformed(ActionEvent ae)
{
if(ae.getSource() == sendMailItem) {
cardLayout.show(mainPanel, "SendMail");
} else if(ae.getSource() == readMailItem) {
cardLayout.show(mainPanel, "ReadMail");
} else if(ae.getSource() == quitApp) {
dispose();
} else if(ae.getSource() == sendMailButton) {
sendMail();
}
}
private void showMessages(int row, TreePath path)
{
currentFolderName = path.getLastPathComponent().toString();
if(currentFolderName == null || currentFolderName.equals("")) {
System.out.println("ERROR in showMessages. folderName equals " + currentFolderName);
return;
}
mailLibrary.getFolderContents("Outlook", "Top of Personal Folders", currentFolderName);
MailFolder folder = mailLibrary.findFolder("Example");
for(int i=0; i<folder.getMessageCount(); i++) {
tableModel.addMessage(folder.getMessage(i).fromAddress,
folder.getMessage(i).subject);
}
}
private void loadMailFolders()
{
DefaultMutableTreeNode top = new DefaultMutableTreeNode("Mail Folders");
mailLibrary.getFolderList("Outlook", "Top of Personal Folders");
for(int i=0; i<mailLibrary.getFolderCount(); i++) {
top.add(new DefaultMutableTreeNode(mailLibrary.getFolder(i).getFolderName()));
}
folderTree = new JTree(top);
folderTree.addMouseListener(
new MouseAdapter() {
public void mousePressed(MouseEvent e) {
int selRow = folderTree.getRowForLocation(e.getX(), e.getY());
TreePath selPath = folderTree.getPathForLocation(e.getX(), e.getY());
if(selRow != -1) {
if(e.getClickCount() == 2) {
showMessages(selRow, selPath);
}
}
}
}
);
}
public void createAndShowGUI()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200, 50);
JMenu mainMenu = new JMenu("Action");
menuBar = new JMenuBar();
sendMailItem = new JMenuItem("Send Mail");
readMailItem = new JMenuItem("Read Mail");
quitApp = new JMenuItem("Quit");
sendMailItem.addActionListener(this);
readMailItem.addActionListener(this);
quitApp.addActionListener(this);
mainMenu.add(sendMailItem);
mainMenu.add(readMailItem);
mainMenu.add(quitApp);
menuBar.add(mainMenu);
setJMenuBar(menuBar);
cardLayout = new CardLayout();
mainPanel = new JPanel(cardLayout);
mainPanel.add(createReadMailPanel(), "ReadMail");
mainPanel.add(createSendMailPanel(), "SendMail");
add(mainPanel);
pack();
setVisible(true);
}
public static void main(String args[])
{
MailClient mc = new MailClient("JNI Mail Client");
mc.createAndShowGUI();
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?