Bläddra i källkod

Adds first rightClick optionMenu to networkTreeView

Andreas T. Meyer-Berg 6 år sedan
förälder
incheckning
a7beb9e569

+ 1 - 1
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/view/popups/NetworkTreeCellRenderer.java

@@ -31,8 +31,8 @@ public class NetworkTreeCellRenderer implements TreeCellRenderer {
 	 * Creates a new NetworkTreeCellRenderer
 	 */
 	public NetworkTreeCellRenderer(Controller controller) {
-		label = new JLabel();
 		this.controller = controller;
+		label = new JLabel();
 	}
 	@Override
 	public Component getTreeCellRendererComponent(JTree tree, Object value,

+ 58 - 7
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/view/popups/NetworkTreePanel.java

@@ -10,8 +10,11 @@ import java.util.Observable;
 import java.util.Observer;
 
 import javax.swing.JFrame;
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
 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.DefaultTreeModel;
@@ -65,18 +68,24 @@ public class NetworkTreePanel extends JScrollPane implements Observer {
 	private Controller controller;
 
 	/**
-	 * Creates a new Netork Tree Panel
+	 * Right click menu
+	 */
+	private JPopupMenu rightClick;
+	/**
+	 * Creates a new Network Tree Panel
 	 * 
-	 * @param c
+	 * @param controller
 	 *            Controller
 	 * @param parent
 	 *            parent frame
 	 */
-	public NetworkTreePanel(Controller c, JFrame parent) {
+	public NetworkTreePanel(Controller controller, JFrame parent) {
 		that = this;
 		this.parent = parent;
-		network = c.getNetworkController();
+		this.controller = controller;
+		network = this.controller.getNetworkController();
 		tree = new JTree();
+		initializeRightClickMenu();
 
 		/**
 		 * Custom Renderer
@@ -102,26 +111,33 @@ public class NetworkTreePanel extends JScrollPane implements Observer {
 			public void mouseClicked(MouseEvent e) {
 				TreePath clicked = tree.getPathForLocation(e.getX(), e.getY());
 				System.out.println("Click on tree: " + clicked);
+
+				showRightClickMenu(e, clicked);
+				
 			}
 		});
 		this.setViewportView(tree);
 		this.setPreferredSize(this.parent.getSize());
-
+		
+		
 		/**
 		 * MVC - Receive updates on model change, and remove listener on Frame
 		 * close
 		 */
-		c.addObserver(this);
+		controller.addObserver(this);
 		parent.addWindowListener(new WindowAdapter() {
 			@Override
 			public void windowClosing(WindowEvent e) {
-				c.removeObserver(that);
+				controller.removeObserver(that);
 				super.windowClosing(e);
 			}
 		});
 		update(null, null);
 	}
 
+
+
+
 	@Override
 	public void update(Observable o, Object arg) {
 		root = new DefaultMutableTreeNode("Network");
@@ -171,4 +187,39 @@ public class NetworkTreePanel extends JScrollPane implements Observer {
 		tree.repaint();
 
 	}
+	
+	/**
+	 * Initializes the rightClickMenu
+	 */
+	private void initializeRightClickMenu() {
+		rightClick = new JPopupMenu();
+		rightClick.add(new JMenuItem("Option 1"));
+		rightClick.add(new JMenuItem("Option 2"));
+		this.add(rightClick);
+		
+	}
+	/**
+	 * Shows the right click menu
+	 * @param e Mouse event which triggred this method
+	 * @param clicked clicked tree path
+	 */
+	private void showRightClickMenu(MouseEvent e, TreePath clicked) {
+		if(!SwingUtilities.isRightMouseButton(e) || clicked == null ){
+			/**
+			 * Hide Menu, maybe create methods later ?
+			 */
+			rightClick.setVisible(false);
+			rightClick.setEnabled(false);
+		}else{
+			Object o = clicked.getLastPathComponent();
+			if(o instanceof SmartDevice){
+				//TODO: Specific actions
+			}
+			rightClick.setLocation(e.getLocationOnScreen());
+			rightClick.setVisible(true);
+			rightClick.setEnabled(true);
+			if(o instanceof SmartDevice) System.out.println(((SmartDevice)o).getName());
+			
+		}
+	}
 }