001: package examples.swingdemos;
002:
003: import java.awt.*;
004: import java.awt.event.*;
005: import java.io.*;
006: import java.net.*;
007:
008: import javax.swing.*;
009: import javax.swing.event.*;
010: import javax.swing.tree.*;
011:
012: import net.ar.webonswing.remote.*;
013:
014: public class TreeDemo extends JFrame {
015: private JEditorPane htmlPane;
016: static boolean DEBUG = false;
017: URL helpURL;
018:
019: //Optionally play with line styles. Possible values are
020: //"Angled", "Horizontal", and "None" (the default).
021: private boolean playWithLineStyle = false;
022: private String lineStyle = "Angled";
023:
024: public TreeDemo() {
025: super ("TreeDemo");
026:
027: //Create the nodes.
028: DefaultMutableTreeNode top = new DefaultMutableTreeNode(
029: "The Java Series");
030: createNodes(top);
031:
032: //Create a tree that allows one selection at a time.
033: final JTree tree = new JTree(top);
034: tree.getSelectionModel().setSelectionMode(
035: TreeSelectionModel.SINGLE_TREE_SELECTION);
036:
037: //Listen for when the selection changes.
038: tree
039: .addTreeSelectionListener(new MyTreeSelectionListener(
040: tree));
041:
042: if (playWithLineStyle) {
043: tree.putClientProperty("JTree.lineStyle", lineStyle);
044: }
045:
046: //Create the scroll pane and add the tree to it.
047: JScrollPane treeView = new JScrollPane(tree);
048:
049: //Create the HTML viewing pane.
050: htmlPane = new JEditorPane();
051: htmlPane.setEditable(false);
052: initHelp();
053: JScrollPane htmlView = new JScrollPane(htmlPane);
054:
055: //Add the scroll panes to a split pane.
056: JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
057: splitPane.setTopComponent(treeView);
058: //splitPane.setBottomComponent(htmlView);
059:
060: Dimension minimumSize = new Dimension(100, 50);
061: htmlView.setMinimumSize(minimumSize);
062: treeView.setMinimumSize(minimumSize);
063: splitPane.setDividerLocation(100); //XXX: ignored in some releases
064: //of Swing. bug 4101306
065: //workaround for bug 4101306:
066: //treeView.setPreferredSize(new Dimension(100, 100));
067:
068: splitPane.setPreferredSize(new Dimension(500, 300));
069:
070: //Add the split pane to this frame.
071: getContentPane().add(treeView, BorderLayout.CENTER);
072: }
073:
074: private final class MyTreeSelectionListener implements
075: TreeSelectionListener, RemoteListener {
076: private final JTree tree;
077:
078: private MyTreeSelectionListener(JTree aTree) {
079: super ();
080: this .tree = aTree;
081: }
082:
083: public void valueChanged(TreeSelectionEvent e) {
084: DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree
085: .getLastSelectedPathComponent();
086:
087: if (node == null)
088: return;
089:
090: Object nodeInfo = node.getUserObject();
091: if (node.isLeaf()) {
092: BookInfo book = (BookInfo) nodeInfo;
093: displayURL(book.bookURL);
094: if (DEBUG) {
095: System.out.print(book.bookURL + ": \n ");
096: }
097: } else {
098: displayURL(helpURL);
099: }
100: if (DEBUG) {
101: System.out.println(nodeInfo.toString());
102: }
103: }
104:
105: public String getRemoteName() {
106: return "CheckTreeSelectionListener";
107: }
108:
109: public Object[] getRemoteParameters() {
110: return new Object[0];
111: }
112: }
113:
114: private class BookInfo {
115: public String bookName;
116: public URL bookURL;
117: public String prefix = "file:" + System.getProperty("user.dir")
118: + System.getProperty("file.separator");
119:
120: public BookInfo(String book, String filename) {
121: bookName = book;
122: try {
123: bookURL = new URL(prefix + filename);
124: } catch (java.net.MalformedURLException exc) {
125: System.err.println("Attempted to create a BookInfo "
126: + "with a bad URL: " + bookURL);
127: bookURL = null;
128: }
129: }
130:
131: public String toString() {
132: return bookName;
133: }
134: }
135:
136: private void initHelp() {
137: String s = null;
138: try {
139: s = "file:" + System.getProperty("user.dir")
140: + System.getProperty("file.separator")
141: + "TreeDemoHelp.html";
142: if (DEBUG) {
143: System.out.println("Help URL is " + s);
144: }
145: helpURL = new URL(s);
146: displayURL(helpURL);
147: } catch (Exception e) {
148: System.err.println("Couldn't create help URL: " + s);
149: }
150: }
151:
152: void displayURL(URL url) {
153: try {
154: htmlPane.setPage(url);
155: } catch (IOException e) {
156: System.err.println("Attempted to read a bad URL: " + url);
157: }
158: }
159:
160: private void createNodes(DefaultMutableTreeNode top) {
161: DefaultMutableTreeNode category = null;
162: DefaultMutableTreeNode book = null;
163:
164: category = new DefaultMutableTreeNode(
165: "Books for Java Programmers");
166: top.add(category);
167:
168: //original Tutorial
169: book = new DefaultMutableTreeNode(
170: new BookInfo(
171: "The Java Tutorial: Object-Oriented Programming for the Internet",
172: "tutorial.html"));
173: category.add(book);
174:
175: //Tutorial Continued
176: book = new DefaultMutableTreeNode(new BookInfo(
177: "The Java Tutorial Continued: The Rest of the JDK",
178: "tutorialcont.html"));
179: category.add(book);
180:
181: //JFC Swing Tutorial
182: book = new DefaultMutableTreeNode(new BookInfo(
183: "The JFC Swing Tutorial: A Guide to Constructing GUIs",
184: "swingtutorial.html"));
185: category.add(book);
186:
187: //Arnold/Gosling
188: book = new DefaultMutableTreeNode(new BookInfo(
189: "The Java Programming Language", "arnold.html"));
190: category.add(book);
191:
192: //FAQ
193: book = new DefaultMutableTreeNode(new BookInfo("The Java FAQ",
194: "faq.html"));
195: category.add(book);
196:
197: //Chan/Lee
198: book = new DefaultMutableTreeNode(new BookInfo(
199: "The Java Class Libraries: An Annotated Reference",
200: "chanlee.html"));
201: category.add(book);
202:
203: //Threads
204: book = new DefaultMutableTreeNode(
205: new BookInfo(
206: "Concurrent Programming in Java: Design Principles and Patterns",
207: "thread.html"));
208: category.add(book);
209:
210: category = new DefaultMutableTreeNode(
211: "Books for Java Implementers");
212: top.add(category);
213:
214: //VM
215: book = new DefaultMutableTreeNode(new BookInfo(
216: "The Java Virtual Machine Specification", "vm.html"));
217: category.add(book);
218:
219: //Language Spec
220: book = new DefaultMutableTreeNode(new BookInfo(
221: "The Java Language Specification", "jls.html"));
222: category.add(book);
223: }
224:
225: public static void main(String[] args) {
226: JFrame frame = new TreeDemo();
227:
228: frame.addWindowListener(new WindowAdapter() {
229: public void windowClosing(WindowEvent e) {
230: System.exit(0);
231: }
232: });
233:
234: frame.pack();
235: frame.setVisible(true);
236: }
237: }
|