浏览代码

Adds Port Editing Template to SmartDeviceCreationPopUp

Andreas T. Meyer-Berg 6 年之前
父节点
当前提交
7865e5338a

+ 210 - 0
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/view/PortEditorPanel.java

@@ -0,0 +1,210 @@
+package de.tu_darmstadt.tk.SmartHomeNetworkSim.view;
+
+/*
+ * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   - Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ *   - Neither the name of Oracle or the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+ 
+ 
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import javax.swing.event.*;
+import java.util.*;
+ 
+//SplitPaneDemo itself is not a visible component.
+public class PortEditorPanel extends JPanel
+                          implements ListSelectionListener {
+    private JPanel editPanel;
+    private JList list;
+    private JSplitPane splitPane;
+    private String[] ports = { "1", "2", "3", "4", "5", "6",
+        "7", "8", "9", "10", "65536", "12"};
+    private JLabel lblPortnumber;
+    private JTextField tfPortNumber;
+    private JLabel lblProtocol;
+    private JLabel lblStatus;
+    private JTextField tfTriggerInterval;
+    private JTextField tfResponseTime;
+    private JTextField textField;
+    public PortEditorPanel() {
+ 
+        //Create the list of images and put it in a scroll pane.
+         
+        list = new JList(ports);
+        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        list.setSelectedIndex(0);
+        list.addListSelectionListener(this);
+         
+        
+        JScrollPane listScrollPane = new JScrollPane(list);
+        editPanel = new JPanel();
+        editPanel.setFont(editPanel.getFont().deriveFont(Font.ITALIC));
+        editPanel.setLayout(null);
+        
+        lblPortnumber = new JLabel("PortNumber:");
+        lblPortnumber.setHorizontalAlignment(SwingConstants.RIGHT);
+        lblPortnumber.setBounds(49, 8, 73, 16);
+        editPanel.add(lblPortnumber);
+         
+        JScrollPane pictureScrollPane = new JScrollPane(editPanel);
+        
+        tfPortNumber = new JTextField();
+        tfPortNumber.setBounds(134, 5, 132, 22);
+        editPanel.add(tfPortNumber);
+        tfPortNumber.setColumns(10);
+        
+        lblProtocol = new JLabel("Protocol:");
+        lblProtocol.setHorizontalAlignment(SwingConstants.RIGHT);
+        lblProtocol.setBounds(66, 37, 56, 16);
+        editPanel.add(lblProtocol);
+        
+        lblStatus = new JLabel("Status:");
+        lblStatus.setHorizontalAlignment(SwingConstants.RIGHT);
+        lblStatus.setBounds(66, 66, 56, 16);
+        editPanel.add(lblStatus);
+        
+        JButton btnEditConnection = new JButton("Edit");
+        btnEditConnection.setBounds(193, 33, 73, 25);
+        editPanel.add(btnEditConnection);
+        
+        JLabel lblMqtt = new JLabel("MQTT");
+        lblMqtt.setBounds(134, 37, 56, 16);
+        editPanel.add(lblMqtt);
+        
+        JComboBox comboBox = new JComboBox();
+        comboBox.setBounds(134, 63, 132, 22);
+        editPanel.add(comboBox);
+        
+        JLabel lblTriggerInterval = new JLabel("Trigger Interval:");
+        lblTriggerInterval.setHorizontalAlignment(SwingConstants.RIGHT);
+        lblTriggerInterval.setBounds(0, 95, 122, 16);
+        editPanel.add(lblTriggerInterval);
+        
+        tfTriggerInterval = new JTextField();
+        tfTriggerInterval.setBounds(134, 92, 132, 22);
+        editPanel.add(tfTriggerInterval);
+        tfTriggerInterval.setColumns(10);
+        
+        JLabel lblResponseTime = new JLabel("Response Time:");
+        lblResponseTime.setHorizontalAlignment(SwingConstants.RIGHT);
+        lblResponseTime.setBounds(10, 124, 112, 16);
+        editPanel.add(lblResponseTime);
+        
+        tfResponseTime = new JTextField();
+        tfResponseTime.setBounds(134, 121, 132, 22);
+        editPanel.add(tfResponseTime);
+        tfResponseTime.setColumns(10);
+        
+        JLabel lblLasttrigger = new JLabel("LastTrigger:");
+        lblLasttrigger.setHorizontalAlignment(SwingConstants.RIGHT);
+        lblLasttrigger.setBounds(20, 153, 102, 16);
+        editPanel.add(lblLasttrigger);
+        
+        textField = new JTextField();
+        textField.setBounds(134, 150, 132, 22);
+        editPanel.add(textField);
+        textField.setColumns(10);
+ 
+        //Create a split pane with the two scroll panes in it.
+        splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
+                                   listScrollPane, pictureScrollPane);
+        //splitPane.setOneTouchExpandable(true);
+        splitPane.setDividerLocation(60);
+ 
+        //Provide minimum sizes for the two components in the split pane.
+        Dimension minimumSize = new Dimension(60, 50);
+        listScrollPane.setMinimumSize(minimumSize);
+        listScrollPane.setMaximumSize(minimumSize);
+        pictureScrollPane.setMinimumSize(minimumSize);
+ 
+        //Provide a preferred size for the split pane.
+        splitPane.setPreferredSize(new Dimension(400, 200));
+        updateLabel(ports[list.getSelectedIndex()]);
+    }
+     
+    //Listens to the list
+    public void valueChanged(ListSelectionEvent e) {
+        JList list = (JList)e.getSource();
+        updateLabel(ports[list.getSelectedIndex()]);
+    }
+     
+    //Renders the selected image
+    protected void updateLabel (String name) {
+    }
+ 
+    //Used by SplitPaneDemo2
+    public JList getImageList() {
+        return list;
+    }
+ 
+    public JSplitPane getSplitPane() {
+        return splitPane;
+    }
+ 
+    
+    /** Returns an ImageIcon, or null if the path was invalid. */
+    protected static ImageIcon createImageIcon(String path) {
+       java.net.URL imgURL = PortEditorPanel.class.getResource(path);
+        if (imgURL != null) {
+            return new ImageIcon(imgURL);
+        } else {
+            System.err.println("Couldn't find file: " + path);
+            return null;
+        }
+    }
+ 
+    /**
+     * Create the GUI and show it.  For thread safety,
+     * this method should be invoked from the
+     * event-dispatching thread.
+     */
+    private static void createAndShowGUI() {
+ 
+        //Create and set up the window.
+        JFrame frame = new JFrame("SplitPaneDemo");
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        PortEditorPanel splitPaneDemo = new PortEditorPanel();
+        frame.getContentPane().add(splitPaneDemo.getSplitPane());
+ 
+        //Display the window.
+        frame.pack();
+        frame.setVisible(true);
+    }
+ 
+    public static void main(String[] args) {
+        //Schedule a job for the event-dispatching thread:
+        //creating and showing this application's GUI.
+        javax.swing.SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+                createAndShowGUI();
+            }
+        });
+    }
+}

+ 11 - 4
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/view/SmartDeviceCreationPopUp.java

@@ -20,6 +20,8 @@ import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.SmartDevice;
 import java.awt.GridBagLayout;
 import java.awt.GridBagConstraints;
 import java.awt.Insets;
+import java.awt.GridLayout;
+import javax.swing.ScrollPaneConstants;
 
 @SuppressWarnings("serial")
 /**
@@ -170,12 +172,17 @@ public class SmartDeviceCreationPopUp extends JDialog {
 			panelLinks.add(new JLabel(l.getName()));
 		}
 
-		JPanel panelConnections = new JPanel();
-		tabbedPane.addTab("Connections", null, panelConnections, "Edit Connections/Ports/Timings of the SmartDevice");
+		PortEditorPanel panelConnections = new PortEditorPanel();
+		tabbedPane.addTab("Connections", null, panelConnections.getSplitPane(), "Edit Connections/Ports/Timings of the SmartDevice");
+		panelConnections.setEnabled(true);
+		panelConnections.setEnabled(true);
+		/**
 		for(Port p:newDevice.getPorts()){
-			panelConnections.add(new JLabel("Port "+p.getPortNumber()+": "+p.getConnection().getProtocol().getName()+" state:"+Port.statusToString(p.getStatus())+" triggerIntervall:"+p.getTriggerInterval()));
+			panelConnectionsScroll.add(new JLabel("Port "+p.getPortNumber()+": "+p.getConnection().getProtocol().getName()+" state:"+Port.statusToString(p.getStatus())+" triggerIntervall:"+p.getTriggerInterval()));
+			panelConnectionsScroll.add(new JLabel("Port "+p.getPortNumber()+": "+p.getConnection().getProtocol().getName()+" state:"+Port.statusToString(p.getStatus())+" triggerIntervall:"+p.getTriggerInterval()));
+			panelConnectionsScroll.add(new JLabel("Port "+p.getPortNumber()+": "+p.getConnection().getProtocol().getName()+" state:"+Port.statusToString(p.getStatus())+" triggerIntervall:"+p.getTriggerInterval()));
 		}
-		
+		*/
 		
 		JButton btnCreateDevice = new JButton("Verify & Create SmartDevice");
 		btnCreateDevice.addActionListener(a -> validateAndAddDevice());

+ 1 - 7
src/main/java/de/tu_darmstadt/tk/SmartHomeNetworkSim/view/VisualisationPanel.java

@@ -49,12 +49,6 @@ public class VisualisationPanel extends JPanel implements Observer {
 		this.model = model;
 		this.control = control;
 		
-		//Set Visualization Radius as Model.getDepth()
-		/**
-		 * Radius of a circle around the SmartDevice (including middlepoint)
-		 */
-		control.setDepth(17);
-		
 		this.interactor = new VisualisationInteractor(model, control, this);
 
 		this.addMouseMotionListener(interactor);
@@ -256,7 +250,7 @@ public class VisualisationPanel extends JPanel implements Observer {
 		}
 		// paint new in progress connection, if a connection or link is in
 		// creation
-		g.setColor(Color.RED);
+		g.setColor(Color.ORANGE);
 		if (interactor.connectionFrom != null)
 			g.drawLine(interactor.connectionFrom.getX(),
 					interactor.connectionFrom.getY(), interactor.dragged_x,