浏览代码

Merge branch 'Ohne_Drag_and_Drop' of https://git.tk.informatik.tu-darmstadt.de/carlos.garcia/praktikum-holons into Ohne_Drag_and_Drop

Jessey Widhalm 8 年之前
父节点
当前提交
ffac601e91
共有 40 个文件被更改,包括 147 次插入85 次删除
  1. 1 1
      .gitignore
  2. 二进制
      bin/Images/Dummy_House.png
  3. 二进制
      bin/Images/Thumbs.db
  4. 二进制
      bin/Interfaces/CategoryListener.class
  5. 二进制
      bin/Interfaces/ComparableObject.class
  6. 二进制
      bin/Interfaces/ObjectListener.class
  7. 二进制
      bin/classes/Category.class
  8. 二进制
      bin/classes/CpsObject.class
  9. 二进制
      bin/classes/HolonElement.class
  10. 二进制
      bin/classes/HolonObject.class
  11. 二进制
      bin/classes/HolonSwitch.class
  12. 二进制
      bin/classes/HolonTransformer.class
  13. 二进制
      bin/classes/Position.class
  14. 二进制
      bin/exceptions/newException1.class
  15. 二进制
      bin/tests/Tests1.class
  16. 二进制
      bin/tests/praktikumHolonsTestMinimal.class
  17. 二进制
      bin/ui/controller/CategoryController.class
  18. 二进制
      bin/ui/controller/Control$command.class
  19. 二进制
      bin/ui/controller/Control.class
  20. 二进制
      bin/ui/model/Model.class
  21. 二进制
      bin/ui/model/tests.class
  22. 二进制
      bin/ui/view/AddElementPopUp.class
  23. 二进制
      bin/ui/view/AddObjectPopUp.class
  24. 二进制
      bin/ui/view/GUI$1.class
  25. 二进制
      bin/ui/view/GUI$2.class
  26. 二进制
      bin/ui/view/GUI$3.class
  27. 二进制
      bin/ui/view/GUI$4.class
  28. 二进制
      bin/ui/view/GUI$5.class
  29. 二进制
      bin/ui/view/GUI$6.class
  30. 二进制
      bin/ui/view/GUI.class
  31. 二进制
      bin/ui/view/Main$1.class
  32. 二进制
      bin/ui/view/Main.class
  33. 二进制
      bin/ui/view/MyCanvas.class
  34. 24 16
      src/classes/HolonElement.java
  35. 5 0
      src/ui/controller/CanvasController.java
  36. 4 2
      src/ui/controller/CategoryController.java
  37. 5 4
      src/ui/controller/Control.java
  38. 27 10
      src/ui/controller/ObjectController.java
  39. 33 11
      src/ui/view/GUI.java
  40. 48 41
      src/ui/view/MyCanvas.java

+ 1 - 1
.gitignore

@@ -1 +1 @@
-/bin/
+/bin/

二进制
bin/Images/Dummy_House.png


二进制
bin/Images/Thumbs.db


二进制
bin/Interfaces/CategoryListener.class


二进制
bin/Interfaces/ComparableObject.class


二进制
bin/Interfaces/ObjectListener.class


二进制
bin/classes/Category.class


二进制
bin/classes/CpsObject.class


二进制
bin/classes/HolonElement.class


二进制
bin/classes/HolonObject.class


二进制
bin/classes/HolonSwitch.class


二进制
bin/classes/HolonTransformer.class


二进制
bin/classes/Position.class


二进制
bin/exceptions/newException1.class


二进制
bin/tests/Tests1.class


二进制
bin/tests/praktikumHolonsTestMinimal.class


二进制
bin/ui/controller/CategoryController.class


二进制
bin/ui/controller/Control$command.class


二进制
bin/ui/controller/Control.class


二进制
bin/ui/model/Model.class


二进制
bin/ui/model/tests.class


二进制
bin/ui/view/AddElementPopUp.class


二进制
bin/ui/view/AddObjectPopUp.class


二进制
bin/ui/view/GUI$1.class


二进制
bin/ui/view/GUI$2.class


二进制
bin/ui/view/GUI$3.class


二进制
bin/ui/view/GUI$4.class


二进制
bin/ui/view/GUI$5.class


二进制
bin/ui/view/GUI$6.class


二进制
bin/ui/view/GUI.class


二进制
bin/ui/view/Main$1.class


二进制
bin/ui/view/Main.class


二进制
bin/ui/view/MyCanvas.class


+ 24 - 16
src/classes/HolonElement.java

@@ -14,17 +14,21 @@ public class HolonElement {
 	float totalEnergy;
 	/* Path of the image for the Obj. */
 	String image;
+	/* +: for Consumers and -: Producers */
+	String sign;
 
-	
-	
 	public HolonElement(String eleName, float energy, int amount) {
 		setEleName(eleName);
 		setAmount(amount);
 		setEnergy(energy);
 		setActive(true);
+		if (energy < 0) {
+			setSign("-");
+		} else {
+			setSign("+");
+		}
 	}
 
-
 	/**
 	 * @return the name
 	 */
@@ -33,7 +37,8 @@ public class HolonElement {
 	}
 
 	/**
-	 * @param name the name to set
+	 * @param name
+	 *            the name to set
 	 */
 	public void setEleName(String name) {
 		this.eleName = name;
@@ -47,7 +52,8 @@ public class HolonElement {
 	}
 
 	/**
-	 * @param amount the amount to set
+	 * @param amount
+	 *            the amount to set
 	 */
 	public void setAmount(int amount) {
 		this.amount = amount;
@@ -61,7 +67,8 @@ public class HolonElement {
 	}
 
 	/**
-	 * @param energy the energy to set
+	 * @param energy
+	 *            the energy to set
 	 */
 	public void setEnergy(float energy) {
 		this.energy = energy;
@@ -75,7 +82,8 @@ public class HolonElement {
 	}
 
 	/**
-	 * @param active the active to set
+	 * @param active
+	 *            the active to set
 	 */
 	public void setActive(boolean active) {
 		this.active = active;
@@ -88,21 +96,14 @@ public class HolonElement {
 		return image;
 	}
 
-
-
-
-
 	/**
-	 * @param image the image to set
+	 * @param image
+	 *            the image to set
 	 */
 	public void setImage(String image) {
 		this.image = image;
 	}
 
-
-
-
-
 	/**
 	 * Multiply the amount of gadgets, given by the user, and the
 	 * consumption/production. If the switch isWorking is turned off for on
@@ -115,4 +116,11 @@ public class HolonElement {
 		return totalEnergy;
 	}
 
+	public void setSign(String s) {
+		this.sign = s;
+	}
+
+	public String getSign() {
+		return sign;
+	}
 }

+ 5 - 0
src/ui/controller/CanvasController.java

@@ -1,5 +1,6 @@
 package ui.controller;
 
+import Interfaces.CategoryListener;
 import Interfaces.ObjectListener;
 import classes.CpsObject;
 import ui.model.Model;
@@ -24,6 +25,10 @@ public class CanvasController {
 		notifyObjListeners();
 		System.out.println("Added: " + name);
 	}
+	
+	public void addObjectListener(ObjectListener objLis) {
+		MODEL.getObjectListeners().add(objLis);
+	}
 
 	/**
 	 * notifies all listeners about changes in the Canvas

+ 4 - 2
src/ui/controller/CategoryController.java

@@ -35,7 +35,9 @@ public class CategoryController {
 		HolonObject powerp = new HolonObject("Power Plant");
 		powerp.setImage("/Images/power-plant.png");
 		HolonObject house = new HolonObject("House");
-		house.setImage("/Images/home-2.png");
+		house.setImage("/Images/home.png");
+		
+		System.out.println(house.toString());
 		HolonTransformer transformer = new HolonTransformer("Transformer");
 		transformer.setImage("/Images/transformer.png");
 		HolonSwitch sw = new HolonSwitch("Switch");
@@ -183,7 +185,7 @@ public class CategoryController {
 	 * 
 	 * @param catLis
 	 */
-	public void addCatListener(CategoryListener catLis) {
+	public void addCategoryListener(CategoryListener catLis) {
 		MODEL.getCategoryListeners().add(catLis);
 	}
 

+ 5 - 4
src/ui/controller/Control.java

@@ -61,10 +61,6 @@ public class Control {
 		return categoryController.searchCatNode(name);
 	}
 
-	public void initListener(CategoryListener catLis) {
-		categoryController.addCatListener(catLis);
-	}
-
 	public void deleteCategory(String catName) {
 		categoryController.deleteCategory(catName);
 	}
@@ -96,6 +92,7 @@ public class Control {
 
 	}
 
+	/* Global Operations*/
 	public int getScale(){
 		return globalController.getScale();
 	}
@@ -104,6 +101,10 @@ public class Control {
 		return globalController.getScaleDiv2();
 	}
 	////////// etc
+	public void initListener(CategoryListener catLis) {
+		categoryController.addCategoryListener(catLis);
+	}
+	
 	/**
 	 * Getter for Model
 	 * 

+ 27 - 10
src/ui/controller/ObjectController.java

@@ -105,9 +105,21 @@ public class ObjectController {
 		obj.getElements().remove(ele);
 	}
 
-	public void deleteElementInCanvas(String obj, String ele) {
-		HolonElement element;
-		//searchHolonObject(obj, MODEL.getObjectsOnCanvas()).;
+	/**
+	 * deletes a Element from a given Canvas Object
+	 * @param obj
+	 * @param ele
+	 * @param amount
+	 */
+	public void deleteElementInCanvas(String obj, String ele, int amount) {
+		HolonObject object = searchHolonObject(obj, MODEL.getObjectsOnCanvas());
+		HolonElement element = searchHolonElement(object, ele);
+
+		element.setAmount(element.getAmount() - amount);
+
+		if (element.getAmount() <= 0)
+			deleteElement(object, element);
+
 	}
 
 	/**
@@ -118,15 +130,20 @@ public class ObjectController {
 	 * @return
 	 */
 	public HolonObject searchHolonObject(String object, ArrayList<CpsObject> list) {
-		HolonObject obj = null;
-
 		for (CpsObject objects : list) {
-			if (objects.getObjName().equals(object)) {
-				obj = (HolonObject) objects;
-				break;
-			}
+			if (objects.getObjName().equals(object))
+				return (HolonObject) objects;
+		}
+		return null;
+	}
+
+	public HolonElement searchHolonElement(HolonObject object, String element) {
+
+		for (HolonElement elements : object.getElements()) {
+			if (elements.getEleName().equals(element))
+				return elements;
 		}
-		return obj;
+		return null;
 	}
 
 	/**

+ 33 - 11
src/ui/view/GUI.java

@@ -1,6 +1,7 @@
 package ui.view;
 
 import java.io.File;
+import java.text.AttributedCharacterIterator;
 import java.util.ArrayList;
 import javax.swing.JFrame;
 import javax.swing.JLabel;
@@ -23,13 +24,19 @@ import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.JEditorPane;
 import javax.swing.JFileChooser;
 import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableModel;
 
 import java.awt.Color;
 import java.awt.Component;
 import java.awt.Cursor;
 import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
 import java.awt.Image;
 import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Shape;
 import java.awt.Toolkit;
 import java.awt.BorderLayout;
 
@@ -42,6 +49,7 @@ import javax.swing.ImageIcon;
 
 import classes.Category;
 import classes.CpsObject;
+import classes.HolonElement;
 import classes.HolonObject;
 import classes.HolonSwitch;
 import classes.HolonTransformer;
@@ -50,6 +58,7 @@ import Interfaces.CategoryListener;
 import java.awt.event.ActionListener;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
+import java.awt.image.ImageObserver;
 import java.awt.event.ActionEvent;
 
 public class GUI implements CategoryListener {
@@ -75,7 +84,8 @@ public class GUI implements CategoryListener {
 	private final JEditorPane dtrpnHereWillBe = new JEditorPane();
 	private final JSplitPane splitPane_2 = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
 
-	private JTable table;
+	private JTable table = new JTable();
+	private DefaultTableModel tableModel = new DefaultTableModel();
 	private final Model model;
 	private final Control controller;
 	private AddObjectPopUp addObjectPopUP;
@@ -137,11 +147,6 @@ public class GUI implements CategoryListener {
 
 		menuBar.add(mnHelp);
 
-		// Table
-		String[] columnNames = { "Gadget", "Typ", "Energy", "Quantity" };
-
-		Object[][] data = {};
-
 		canvas.setBackground(Color.WHITE);
 		canvas.setPreferredSize(new Dimension(10000, 10000));
 		JScrollPane canvasSP = new JScrollPane(canvas);
@@ -158,14 +163,15 @@ public class GUI implements CategoryListener {
 		scrollPane_2.setViewportView(dtrpnHereWillBe);
 
 		JScrollPane scrollPane = new JScrollPane();
-
-		table = new JTable(data, columnNames);
+		// Table Set up
+		Object[] columnNames = { "Gadget", "Typ", "Energy", "Quantity" };
+		tableModel.setColumnIdentifiers(columnNames);
+		table.setModel(tableModel);
 		scrollPane.setViewportView(table);
-
 		table.setFillsViewportHeight(true);
-		table.setModel(new DefaultTableModel(data, columnNames));
 		table.setCellSelectionEnabled(true);
 		table.setColumnSelectionAllowed(true);
+
 		frmCyberPhysical.getContentPane().setLayout(new BorderLayout(0, 0));
 
 		TreeCellRenderer customRenderer = new TreeCellRenderer() {
@@ -249,7 +255,6 @@ public class GUI implements CategoryListener {
 			public void mousePressed(MouseEvent e) {
 				try {
 					actualObjectClicked = tree.getPathForLocation(e.getX(), e.getY()).getLastPathComponent().toString();
-
 					for (Category cat : model.getCategories()) {
 						for (CpsObject cps : cat.getObjects()) {
 							if (actualObjectClicked.compareTo(cps.getCompareName()) == 0) {
@@ -315,6 +320,23 @@ public class GUI implements CategoryListener {
 			}
 		});
 
+		canvas.addMouseListener(new MouseAdapter() {
+			@Override
+			public void mousePressed(MouseEvent e) {
+				if (tableModel.getRowCount() > 0) {
+					for (int i = tableModel.getRowCount() - 1; i > -1; i--) {
+						tableModel.removeRow(i);
+					}
+				}
+				if (canvas.dataSelected == null) {
+					for (HolonElement he : canvas.dataSelected) {
+						Object[] temp = { he.getEleName(), he.getSign(), he.getEnergy(), he.getAmount() };
+						tableModel.addRow(temp);
+					}
+				}
+			}
+		});
+
 		toolBar.add(btnAdd);
 
 		// Del Button

+ 48 - 41
src/ui/view/MyCanvas.java

@@ -49,10 +49,11 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 	Graphics2D g2; // For Painting
 	private int cx;
 	private int cy;
+	ArrayList<HolonElement> dataSelected = new ArrayList<HolonElement>();
 
-	private boolean dragging = false;	//for dragging
-	private boolean drawEdge = false;	//for drawing edges
-	private boolean click = false; 		// for double click
+	private boolean dragging = false; // for dragging
+	private boolean drawEdge = false; // for drawing edges
+	private boolean click = false; // for double click
 	private CpsObject tempCps = null;
 	private Rectangle selectRect = new Rectangle();
 
@@ -70,7 +71,7 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 		itemDelete.addActionListener(new ActionListener() {
 			@Override
 			public void actionPerformed(ActionEvent e) {
-				//Remove the selected Object object
+				// Remove the selected Object object
 				model.getObjectsOnCanvas().remove(tempCps);
 				for (CpsObject cps : model.getObjectsOnCanvas()) {
 					cps.getConnectedTo().remove(tempCps);
@@ -93,7 +94,7 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 	 */
 	public void paintComponent(Graphics g) {
 		super.paintComponent(g);
-		//Rendering
+		// Rendering
 		g2 = (Graphics2D) g;
 		RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 		g2.setRenderingHints(rh);
@@ -103,6 +104,7 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 			g2.setColor(Color.GREEN);
 			g2.fillRect((int) selectRect.getX(), (int) selectRect.getY(), (int) selectRect.getWidth(),
 					(int) selectRect.getHeight());
+
 		}
 
 		// drawEdges
@@ -114,12 +116,10 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 		for (CpsObject cps : model.getObjectsOnCanvas()) {
 			for (CpsObject con : cps.getConnectedTo()) {
 				if (con.getID() != model.getSelectedObjectID() && cps.getID() != model.getSelectedObjectID())
-
 					g2.drawLine(cps.getPosition().x + controller.getScaleDiv2(),
 							cps.getPosition().y + controller.getScaleDiv2(),
 							con.getPosition().x + controller.getScaleDiv2(),
 							con.getPosition().y + controller.getScaleDiv2());
-
 			}
 		}
 
@@ -128,12 +128,10 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 		for (CpsObject cps : model.getObjectsOnCanvas()) {
 			for (CpsObject con : cps.getConnectedTo()) {
 				if (con.getID() == model.getSelectedObjectID())
-
 					g2.drawLine(cps.getPosition().x + controller.getScaleDiv2(),
 							cps.getPosition().y + controller.getScaleDiv2(),
 							con.getPosition().x + controller.getScaleDiv2(),
 							con.getPosition().y + controller.getScaleDiv2());
-
 			}
 		}
 
@@ -149,7 +147,7 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 
 	@Override
 	public void mouseClicked(MouseEvent e) {
-		//If double clicked on a Switch change the Image to on/off
+		// If double clicked on a Switch change the Image to on/off
 		if (doubleClick() && tempCps != null && tempCps.getClass() == HolonSwitch.class) {
 			System.out.println("trans double click");
 			if (tempCps.getImage().compareTo("/Images/switch-on.png") == 0) {
@@ -177,10 +175,6 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 
 	@Override
 	public void mousePressed(MouseEvent e) {
-		// TODO Auto-generated method stub
-		x = e.getX();
-		y = e.getY();
-
 		tempCps = null;
 		// Object Selection
 		for (CpsObject cps : model.getObjectsOnCanvas()) {
@@ -188,9 +182,16 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 			cy = cps.getPosition().y;
 			if (x - controller.getScale() <= cx && y - controller.getScale() <= cy && x >= cx && y >= cy) {
 				tempCps = cps;
-				//If drawing an Edge (CTRL down)
-				if (e.isControlDown())
-					drawEdge = true;		
+				// If drawing an Edge (CTRL down)
+				if (e.isControlDown()){
+					drawEdge = true;
+				}
+				if (tempCps.getClass() == HolonObject.class) {
+					HolonObject tempObj = ((HolonObject) tempCps);
+					dataSelected = tempObj.getElements();
+				} else {
+					dataSelected = new ArrayList<>();
+				}
 			}
 		}
 		// Object Selection Highlighting (selectRect)
@@ -205,8 +206,8 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 			drawEdge = false;
 			drawDeleteEdge();
 		}
-		
-		//if Dragged reposition the Object
+
+		// if Dragged reposition the Object
 		if (dragging) {
 			x = e.getX();
 			y = e.getY();
@@ -236,17 +237,23 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 			repaint();
 		} else {
 			try {
+				x = e.getX()-controller.getScaleDiv2();
+				y = e.getY()-controller.getScaleDiv2();
+				if(e.getX()<controller.getScaleDiv2())x = 0;
+				else if(e.getX()>this.getWidth()-controller.getScaleDiv2())x = this.getWidth()-controller.getScale();
+				if(e.getY()<controller.getScaleDiv2())y = 0;
+				else if(e.getY()>this.getHeight()-controller.getScaleDiv2())y = this.getHeight()-controller.getScale();
 				//Drag Position
-				tempCps.setPosition(e.getX() - controller.getScaleDiv2(), e.getY() - controller.getScaleDiv2());
-				dragging = true;
+				tempCps.setPosition(x, y);
 				//Highlighting Position
-				selectRect.setLocation(tempCps.getPosition().x - (controller.getScale() / 20),
-						tempCps.getPosition().y - (controller.getScale() / 20)); 
+				selectRect.setLocation(x - (controller.getScale() / 20),y - (controller.getScale() / 20)); 
 				//TipText Position and name
 				objectTT.setTipText(tempCps.getName());
-				objectTT.setLocation(tempCps.getPosition().x, tempCps.getPosition().y+controller.getScale());
+				objectTT.setLocation(x, y+controller.getScale());
 				repaint();
-			} catch (Exception e2) {
+				}
+			catch (Exception e2) {
+			
 			}
 		}
 	}
@@ -255,7 +262,7 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 	public void mouseMoved(MouseEvent e) {
 		x = e.getX();
 		y = e.getY();
-		//Everytghin for the tooltip :)
+		// Everytghin for the tooltip :)
 		boolean on = false;
 		for (CpsObject cps : model.getObjectsOnCanvas()) {
 
@@ -264,7 +271,7 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 			if (x - controller.getScale() <= cx && y - controller.getScale() <= cy && x >= cx && y >= cy) {
 
 				objectTT.setTipText(cps.getName());
-				objectTT.setLocation(cx, cy+controller.getScale());
+				objectTT.setLocation(cx, cy + controller.getScale());
 				on = true;
 			}
 		}
@@ -310,26 +317,26 @@ class MyCanvas extends JPanel implements MouseListener, MouseMotionListener {
 			}
 		}
 	}
-	
+
 	/**
 	 * Checks if a double click was made
 	 * 
 	 * @return true if doublecklick, false if not
 	 */
-	private boolean doubleClick(){
+	private boolean doubleClick() {
 		if (click) {
-	        click = false;
-	        return true;
-	    } else {
-	    	click = true;
-	        Timer t = new Timer("doubleclickTimer", false);
-	        t.schedule(new TimerTask() {
-	            @Override
-	            public void run() {
-	            	click = false;
-	            }
-	        }, 500);
-	    }
+			click = false;
+			return true;
+		} else {
+			click = true;
+			Timer t = new Timer("doubleclickTimer", false);
+			t.schedule(new TimerTask() {
+				@Override
+				public void run() {
+					click = false;
+				}
+			}, 500);
+		}
 		return false;
 	}
 }