1 5 package net.sf.panoptes.view.swing; 6 7 import java.awt.BorderLayout ; 8 import java.awt.Component ; 9 import java.awt.Event ; 10 import java.awt.event.ActionEvent ; 11 import java.awt.event.MouseAdapter ; 12 import java.awt.event.MouseEvent ; 13 14 import javax.swing.Action ; 15 import javax.swing.BorderFactory ; 16 import javax.swing.JInternalFrame ; 17 import javax.swing.JLabel ; 18 import javax.swing.JPanel ; 19 import javax.swing.JScrollPane ; 20 import javax.swing.JToolBar ; 21 import javax.swing.JTree ; 22 import javax.swing.border.BevelBorder ; 23 import javax.swing.event.TreeModelListener ; 24 import javax.swing.event.TreeSelectionEvent ; 25 import javax.swing.event.TreeSelectionListener ; 26 import javax.swing.tree.DefaultTreeCellRenderer ; 27 import javax.swing.tree.TreeModel ; 28 import javax.swing.tree.TreePath ; 29 30 import net.sf.panoptes.controller.MainController; 31 import net.sf.panoptes.controller.actions.BaseAction; 32 import net.sf.panoptes.controller.actions.ExternalizeFrameAction; 33 import net.sf.panoptes.model.node.Node; 34 35 39 public class MBeanTreeFrame extends JInternalFrame { 40 41 private JTree mbeanTree; 42 private MainWindowSwing parent; 43 private JPanel statusBar; 44 private JLabel statusLabel; 45 private Node selectedNode = null; 46 private JToolBar toolBar; 47 private TreeModel treeModel; 48 private Node rootNode; 49 private final MBeanTreeFrame instance; 50 private Action exploreAction; 51 52 public MBeanTreeFrame(Node rootNode, final MainWindowSwing parent) { 53 super("", true, true, true, true); 54 instance = this; 55 setTitle("Exploring " + rootNode.getConfigDescriptor().getName()); 56 this.parent = parent; 57 this.rootNode = rootNode; 58 JPanel contentPane = new JPanel (new BorderLayout ()); 59 60 createActions(); 61 createToolBar(); 62 createTree(); 63 64 contentPane.add(toolBar, BorderLayout.NORTH); 65 contentPane.add(new JScrollPane (mbeanTree), BorderLayout.CENTER); 66 67 statusBar = new JPanel (new BorderLayout ()); 68 statusBar.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); 69 statusLabel = new JLabel (rootNode.getClass().getName(), JLabel.LEFT); 70 statusBar.add(statusLabel, BorderLayout.WEST); 71 72 contentPane.add(statusBar, BorderLayout.SOUTH); 73 74 this.setContentPane(contentPane); 75 mbeanTree.setSelectionPath(new TreePath (rootNode)); 76 } 77 78 private void createToolBar() { 79 toolBar = new JToolBar (); 80 toolBar.add(exploreAction); 81 toolBar.add(new ExternalizeFrameAction(this)); 82 } 83 84 private void createTree() { 85 mbeanTree = new JTree (); 86 treeModel = new MBeanTreeModel(rootNode); 87 mbeanTree.setModel(treeModel); 88 mbeanTree.setCellRenderer(new DefaultTreeCellRenderer () { 89 90 public Component getTreeCellRendererComponent( 91 JTree tree, 92 Object value, 93 boolean sel, 94 boolean expanded, 95 boolean leaf, 96 int row, 97 boolean hasFocus) { 98 99 Component c = 100 super.getTreeCellRendererComponent( 101 tree, 102 value, 103 sel, 104 expanded, 105 leaf, 106 row, 107 hasFocus); 108 Node n = (Node) value; 109 setText(n.getConfigDescriptor().getName()); 110 String iconName = n.getConfigDescriptor().getIconName(); 111 setIcon(ImageCache.get(iconName)); 112 return c; 113 } 114 }); 115 116 mbeanTree.addMouseListener(new MouseAdapter () { 117 public void mousePressed(MouseEvent e) { 118 maybeShowPopup(e); 119 } 120 121 public void mouseReleased(MouseEvent e) { 122 maybeShowPopup(e); 123 } 124 private void maybeShowPopup(MouseEvent e) { 125 if (e.getModifiers() == Event.META_MASK) { 127 TreePath selPath = mbeanTree.getPathForLocation(e.getX(), e.getY()); 128 Node n = (Node) selPath.getLastPathComponent(); 129 130 if (n == null) 131 return; 132 parent.constructPopupMenu(n, instance).show(mbeanTree, e.getX(), e.getY()); 133 } 134 } 135 }); 136 137 mbeanTree.addTreeSelectionListener(new TreeSelectionListener () { 138 public void valueChanged(TreeSelectionEvent e) { 139 TreePath path = e.getNewLeadSelectionPath(); 140 if (path == null) 141 return; 142 Object o = path.getLastPathComponent(); 143 if (o instanceof Node) { 144 selectedNode = (Node) o; 145 statusLabel.setText( 146 selectedNode.getConfigDescriptor().getDescription() 147 + " - (" 148 + selectedNode.getClass().getName() 149 + ")"); 150 } 151 152 } 153 }); 154 } 155 156 private void createActions() { 157 ClassLoader cl = MBeanTreeFrame.class.getClassLoader(); 158 161 exploreAction = new BaseAction("Explore from here", "icons/explore.gif") { 162 public void actionPerformed(ActionEvent e) { 163 MBeanTreeFrame f = new MBeanTreeFrame(selectedNode, parent); 164 f.pack(); 165 MainController.getInstance().getDesktop().add(f); 166 f.setVisible(true); 167 } 168 }; 169 170 } 171 } 172 | Popular Tags |