import java.awt.BorderLayout; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.SwingUtilities; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import java.util.HashMap; import java.util.Map; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import java.util.ArrayList; import java.util.Arrays; import static java.util.Arrays.asList; public class CourseTreeA extends JFrame { private JTree tree; private JLabel selectedLabel; public CourseTreeA() { final Map<String,String> tab2URL = new HashMap<String,String>(); tab2URL.put("List Iterators", "http://arch.umsl.edu/~siegel/CS4010/Lists/ListIterators.html"); tab2URL.put("Some Classes", "http://arch.umsl.edu/~siegel/CS4010/Lists/commonstuff.html"); tab2URL.put("Mixed Lists", "http://arch.umsl.edu/~siegel/CS4010/Lists/MixedLists.html"); tab2URL.put("HTTP", "http://arch.umsl.edu/~siegel/CS4010/Servlets/http.html"); ///////////////////////////////////////////// //Build the JTree starting at the root =level_0, just a Node DefaultMutableTreeNode level_0=new DefaultMutableTreeNode("CS 4010"); ///////////////////////////////////////////// // At level_1 we just have a list of Strings. List<String> level_1_Strings=new ArrayList<String>( Arrays.asList("Lists","Servlets")); List<DefaultMutableTreeNode> level_1=new ArrayList<DefaultMutableTreeNode>(); for (int i=0;i<level_1_Strings.size();i++) { level_1.add(new DefaultMutableTreeNode(level_1_Strings.get(i))); level_0.add(level_1.get(i)); } /////////////////////////////////////////////////////////// //level_2 and beyond the Strings are a List of Lists of Strings List<List<String>> level_2_Strings=new ArrayList<List<String>>(); level_2_Strings.add(new ArrayList<String>( Arrays.asList("List Iterators","Some Classes","Mixed Lists"))); level_2_Strings.add(new ArrayList<String>( Arrays.asList("HTTP","student.java","New test2","The Get Client","The Post Client"))); List<DefaultMutableTreeNode> level_2=new ArrayList<DefaultMutableTreeNode>(); level_2=buildParentChild(level_2_Strings,level_1); ////////////////////////////////////////////////////////////////////////////// //Finally the JTree tree = new JTree(level_0); ImageIcon imageIcon1 = new ImageIcon(CourseTree.class.getResource("./duke1.jpg")); ImageIcon imageIcon2 = new ImageIcon(CourseTree.class.getResource("./duke2.jpg")); DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer(); renderer.setLeafIcon(imageIcon2); renderer.setOpenIcon(imageIcon1); tree.setCellRenderer(renderer); tree.setShowsRootHandles(true); tree.setRootVisible(true); add(new JScrollPane(tree)); tree.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() { @Override public void valueChanged(TreeSelectionEvent e) { DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); String thisURL=tab2URL.get(selectedNode.getUserObject().toString()); System.out.println(thisURL); if (thisURL!=null) { new Thread(new MyBrowser(2,thisURL)).start(); } } }); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setTitle("Course 4010"); this.setSize(300, 400); this.setVisible(true); } public static void main(String[] args) { new CourseTreeA(); } ////////////The Induction Method//////////////////////////// public List<DefaultMutableTreeNode> buildParentChild(List<List<String>> this_level_Strings,List<DefaultMutableTreeNode> previous_level_Nodes ){ DefaultMutableTreeNode temp=null; List<DefaultMutableTreeNode> this_level_Nodes=new ArrayList<DefaultMutableTreeNode>(); for (int i=0;i<this_level_Strings.size();i++) { for (int j=0;j<this_level_Strings.get(i).size();j++) { this_level_Nodes.add(temp=new DefaultMutableTreeNode(this_level_Strings.get(i).get(j))); previous_level_Nodes.get(i).add(temp); } } return this_level_Nodes; } }