public class Main
1:
2: package mail.gui;
3:
4: import java.awt.Dimension;
5: import java.awt.Toolkit;
6: import java.util.*;
7: import javax.swing.*;
8: import javax.swing.tree.*;
9: import javax.swing.event.*;
10:
11: import mail.*;
12: import adapter.*;
13:
14: public class Main {
15:
16: public static final int INITIAL_FRAME_WIDTH = 800;
17: public static final int INITIAL_FRAME_HEIGHT = 400;
18:
19: public static void main(String[] args) {
20: MailFolder inboxFolder = mail.Main.buildInbox();
21: JTree tree = new JTree(buildMailFolderTree(inboxFolder));
22: JSplitPane splitPane = new JSplitPane();
23: splitPane.setLeftComponent(new JScrollPane(tree));
24: splitPane.setRightComponent(new JPanel());
25: tree.addTreeSelectionListener(new MailFolderTreeSelectionListener(tree, splitPane));
26:
27: JFrame frame = new JFrame("Mails");
28: frame.setContentPane(splitPane);
29: frame.setSize(INITIAL_FRAME_WIDTH, INITIAL_FRAME_HEIGHT);
30: Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
31: frame.setLocation(screenSize.width / 2 - INITIAL_FRAME_WIDTH / 2,
32: screenSize.height / 2 - INITIAL_FRAME_HEIGHT / 2);
33: frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
34: frame.setVisible(true);
35: }
36:
37: static class MailFolderTreeSelectionListener implements TreeSelectionListener {
38:
39: MailFolderTreeSelectionListener(JTree tree, JSplitPane splitPane) {
40: this.tree = tree;
41: this.splitPane = splitPane;
42: }
43:
44: public void valueChanged(TreeSelectionEvent ev) {
45: DefaultMutableTreeNode node =
46: (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
47: if (node != null) {
48: Object item = node.getUserObject();
49: if (item instanceof MailFolder) {
50: splitPane.setRightComponent(new JScrollPane(buildTable((MailFolder) item)));
51: }
52: }
53: }
54:
55: JTree tree;
56: JSplitPane splitPane;
57: }
58:
59: protected static DefaultMutableTreeNode buildMailFolderTree(MailFolder folder) {
60: if (folder != null) {
61: DefaultMutableTreeNode root = new DefaultMutableTreeNode(folder);
62: List subfolders = folder.getSubFolders();
63: Iterator iterator = subfolders.iterator();
64: while (iterator.hasNext()) {
65: Object item = iterator.next();
66: if (item instanceof MailFolder) {
67: root.add(buildMailFolderTree((MailFolder) item));
68: }
69: }
70: return root;
71: }
72: return null;
73: }
74:
75: protected static Table buildTable(MailFolder folder) {
76: if (folder != null) {
77: List mails = folder.getMails();
78: List entries = new ArrayList(mails.size());
79: for (int i = 0; i < mails.size(); i++) {
80: entries.add(new MailEntry((Mail) mails.get(i)));
81: }
82: return new Table(entries);
83: }
84: return null;
85: }
86:
87: }