import java.awt.Color; import java.awt.Dimension; import java.net.MalformedURLException; import java.net.URL; import java.util.Enumeration; import java.util.Vector; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.border.BevelBorder; import javax.swing.border.Border; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath; public class ScienceTree extends JPanel implements TreeSelectionListener{ public JTree tree; String language; int selectionMode; ScienceTableInTree[] table; private static boolean playWithLineStyle = false; private static String lineStyle = "Horizontal"; private static boolean useSystemLookAndFeel = false; private URL codeBase; public ScienceTree(ScienceTable[]st, String lang, int selectionMode, String topNodeName, URL codeBase){ // super(new GridLayout(1,0)); super(); this.codeBase = codeBase; setBackground(Color.WHITE); // setBackground(new Color(0,102,51)); language = lang; this.selectionMode = selectionMode; table = new ScienceTableInTree[st.length]; for(int temp = 0; temp < st.length;temp++) table[temp] = new ScienceTableInTree(st[temp]); init(topNodeName); // setVisible(true); } private class ScienceTableInTree { ScienceTable st; public ScienceTableInTree(ScienceTable st) { this.st = st; } public String toString() { if(language.compareTo("nor") == 0) return st.norwegianName+" ("+st.count+")"; else return st.englishName+" ("+st.count+")"; } } private void init(String topNodeName){ DefaultMutableTreeNode top = new DefaultMutableTreeNode(topNodeName); loadTree(top,"VDP"); tree = new JTree(top); tree.getSelectionModel().setSelectionMode (selectionMode); /* Icon leafIcon; Icon plusIcon; Icon minusIcon; DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer)tree.getCellRenderer(); try { leafIcon = new ImageIcon(new URL(codeBase.toString()+"f.gif")); minusIcon = new ImageIcon(new URL(codeBase.toString()+"m.gif")); plusIcon = new ImageIcon(new URL(codeBase.toString()+"p.gif")); renderer.setLeafIcon(leafIcon); renderer.setOpenIcon(minusIcon); renderer.setClosedIcon(plusIcon); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } */ // Listen for when the selection changes. tree.addTreeSelectionListener(this); if (playWithLineStyle) { System.out.println("line style = " + lineStyle); tree.putClientProperty("JTree.lineStyle", lineStyle); } // Create the scroll pane and add the tree to it. JScrollPane treeView = new JScrollPane(tree); Dimension d = tree.getPreferredSize(); treeView.setPreferredSize(new Dimension(d.width+210,d.height+ (d.height/2))); add(treeView); } public void clearSelections(){ tree.clearSelection(); } public void setSelections(String[] codesToSet){ if (codesToSet.length == 0) return; Enumeration en = ((DefaultMutableTreeNode)tree.getPathForRow(0).getLastPathComponent()).breadthFirstEnumeration(); Vector v = new Vector(); en.nextElement(); while(en.hasMoreElements()){ DefaultMutableTreeNode n = (DefaultMutableTreeNode)en.nextElement(); ScienceTableInTree x = (ScienceTableInTree)n.getUserObject(); for(int tp = 0;tp < codesToSet.length;tp++){ if(codesToSet[tp].compareTo(x.st.code)==0){ TreeNode[]tn = n.getPath(); TreePath tx = new TreePath(tn); v.add(tx); } } } TreePath[] tplist = new TreePath[v.size()]; for(int i = 0; i< v.size();i++) tplist[i] = (TreePath) v.elementAt(i); tree.setSelectionPaths(tplist); } public String getSelections(){ String text = ""; ScienceTableInTree s = null; DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); if (node == null) return ""; TreePath[]tp = tree.getSelectionPaths(); for(int temp = 0;temp < tp.length;temp++ ){ node = (DefaultMutableTreeNode) tp[temp].getLastPathComponent(); try{ s = (ScienceTableInTree) node.getUserObject(); }catch(Exception e){ continue; } if(temp < tp.length-1) text += s.st.code + ","; else text += s.st.code; } return text; } public String getNamedSelections(){ String text = ""; ScienceTableInTree s = null; DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent(); if (node == null) return ""; TreePath[]tp = tree.getSelectionPaths(); for(int temp = 0;temp < tp.length;temp++ ){ node = (DefaultMutableTreeNode) tp[temp].getLastPathComponent(); try{ s = (ScienceTableInTree) node.getUserObject(); }catch(Exception e){ continue; } if(temp < tp.length-1){ if(language.compareTo("nor") == 0) text += s.st.norwegianName + ","; else text += s.st.englishName + ","; } else{ if(language.compareTo("nor") == 0) text += s.st.norwegianName; else text += s.st.englishName; } } return text; } private void loadTree(DefaultMutableTreeNode top, String parentCode){ int[]result; DefaultMutableTreeNode node; if(qHasChildren(parentCode)== false) return; top.setAllowsChildren(true); result = getChildrenPos(parentCode); for(int temp = 0;temp < result.length;temp++){ node = new DefaultMutableTreeNode( table[result[temp]]); top.add(node); loadTree(node,table[result[temp]].st.code); } } private int[] getChildrenPos(String parentCode){ int result = 0; int temp; int[] resultList; for(temp = 0; temp < table.length;temp++) if(parentCode.compareTo(table[temp].st.owner) == 0) result++; resultList = new int[result]; result = 0; for(temp = 0; temp < table.length;temp++){ if(parentCode.compareTo(table[temp].st.owner) == 0) resultList[result++] = temp; } return resultList; } private boolean qHasChildren(String parentCode){ for(int temp = 0; temp < table.length;temp++) if(parentCode.compareTo(table[temp].st.owner) == 0) return true; return false; } public void valueChanged(TreeSelectionEvent e) { } }