View Javadoc
1 /* 2 * TreeView 3 * 4 * $RCSfile: TreeView.java,v $ 5 * $Revision: 1.4 $ 6 * $Date: 2004/01/10 20:10:46 $ 7 * $Source: /cvsroot/jpui/jpui/src/TreeView.java,v $ 8 * 9 * JPUI - Java Preferences User Interface 10 * Copyright (C) 2003 11 * 12 * This program is free software; you can redistribute it and/or modify it 13 * under the terms of the GNU General Public License as published by the Free 14 * Software Foundation; either version 2 of the License, or (at your option) 15 * any later version. 16 * 17 * This program is distributed in the hope that it will be useful, but WITHOUT 18 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 19 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 20 * more details. 21 * 22 * You should have received a copy of the GNU General Public License along with 23 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple 24 * Place, Suite 330, Boston, MA 02111-1307 USA 25 * 26 * Author: macksold@users.sourceforge.net 27 */ 28 29 import java.awt.BorderLayout; 30 31 import java.util.Observable; 32 import java.util.Observer; 33 34 import javax.swing.JOptionPane; 35 import javax.swing.JPanel; 36 import javax.swing.JTree; 37 import javax.swing.event.TreeModelEvent; 38 import javax.swing.event.TreeSelectionEvent; 39 import javax.swing.event.TreeSelectionListener; 40 import javax.swing.tree.TreeSelectionModel; 41 import java.util.prefs.Preferences; 42 import javax.swing.event.TreeModelListener; 43 44 /*** 45 * Left side tree view of user and system 46 * preference trees 47 */ 48 public class TreeView implements Observer, TreeModelListener { 49 // panel 50 private JPanel moPanel; 51 // tree control 52 private JTree moTree; 53 // tree model 54 private PreferencesTreeModel moPreferencesTreeModel; 55 56 /*** 57 * @param oModel 58 */ 59 public TreeView() { 60 moPanel = new JPanel(); 61 moPanel.setLayout(new BorderLayout()); 62 moPreferencesTreeModel = new PreferencesTreeModel(); 63 moTree = new JTree(moPreferencesTreeModel); 64 moPreferencesTreeModel.addTreeModelListener(this); 65 66 moTree.setRootVisible(false); 67 moTree.getSelectionModel().setSelectionMode( 68 TreeSelectionModel.SINGLE_TREE_SELECTION); 69 moTree.setEditable(true); 70 moTree.setShowsRootHandles(true); 71 72 // Listen for when the selection changes. 73 moTree.addTreeSelectionListener(new TreeSelectionListener() { 74 public void valueChanged(TreeSelectionEvent e) { 75 Preferences oNode = 76 (Preferences) moTree 77 .getLastSelectedPathComponent(); 78 79 if (oNode == null) 80 return; 81 82 // update the current node 83 if (oNode instanceof Preferences) { 84 PreferencesModel.Instance().setCurrentNode( 85 ((Preferences) oNode)); 86 } 87 } 88 }); 89 90 moPanel.add(moTree, BorderLayout.CENTER); 91 PreferencesModel.Instance().addObserver(this); 92 } 93 94 /*** 95 * @return 96 */ 97 public JPanel getPanel() { 98 return moPanel; 99 } 100 101 /*** 102 * @see java.util.Observer#update(java.util.Observable, java.lang.Object) 103 */ 104 public void update(Observable oObject, Object oArg) { 105 syncTree(); 106 } 107 108 /*** 109 * Create a node as a child of the current node 110 */ 111 public void newNode() { 112 String sNewNode = 113 JOptionPane.showInputDialog( 114 moPanel.getParent(), 115 Resources.getString("new_node_message"), 116 Resources.getString("new_node_title"), 117 JOptionPane.QUESTION_MESSAGE); 118 if (sNewNode != null) { 119 PreferencesTreeModel oPrefTreeModel = 120 (PreferencesTreeModel)moTree.getModel(); 121 oPrefTreeModel.newNode(sNewNode); 122 } 123 } 124 125 /*** 126 * Delete the current node 127 */ 128 public void deleteNode() { 129 PreferencesTreeModel oPrefTreeModel = 130 (PreferencesTreeModel)moTree.getModel(); 131 oPrefTreeModel.deleteNode(); 132 } 133 134 /*** 135 * @see javax.swing.event.TreeModelListener#treeNodesChanged(javax.swing.event.TreeModelEvent) 136 */ 137 public void treeNodesChanged(TreeModelEvent e) { 138 syncTree(); 139 } 140 141 /*** 142 * @see javax.swing.event.TreeModelListener#treeNodesInserted(javax.swing.event.TreeModelEvent) 143 */ 144 public void treeNodesInserted(TreeModelEvent e) { 145 syncTree(); 146 } 147 148 /*** 149 * @see javax.swing.event.TreeModelListener#treeNodesRemoved(javax.swing.event.TreeModelEvent) 150 */ 151 public void treeNodesRemoved(TreeModelEvent e) { 152 syncTree(); 153 } 154 155 /*** 156 * @see javax.swing.event.TreeModelListener#treeStructureChanged(javax.swing.event.TreeModelEvent) 157 */ 158 public void treeStructureChanged(TreeModelEvent e) { 159 syncTree(); 160 } 161 162 /*** 163 * Ensure that the JTree reflects the current node after the tree 164 * changes by having a node added or removed. 165 */ 166 private void syncTree() { 167 PreferencesModel oModel = PreferencesModel.Instance(); 168 Preferences oCurrentPref = oModel.getCurrentNode(); 169 // Preferences oCurrentTreeSelection = 170 // (Preferences)moTree.getSelectionPath().getLastPathComponent(); 171 172 // update the tree selection 173 // if(!oCurrentPref.equals(oCurrentTreeSelection)) { 174 PreferencesTreeModel oPrefTreeModel = 175 (PreferencesTreeModel)moTree.getModel(); 176 177 moTree.setSelectionPath(oPrefTreeModel.toTreePath(oCurrentPref)); 178 // } 179 } 180 }

This page was automatically generated by Maven