瀏覽代碼

graph zeichnet jz

dominik.rieder 8 年之前
父節點
當前提交
4645d55ec6
共有 4 個文件被更改,包括 128 次插入79 次删除
  1. 7 0
      src/interfaces/GraphListener.java
  2. 14 0
      src/ui/model/Model.java
  3. 1 0
      src/ui/view/GUI.java
  4. 106 79
      src/ui/view/StatisticPane.java

+ 7 - 0
src/interfaces/GraphListener.java

@@ -0,0 +1,7 @@
+package interfaces;
+
+public interface GraphListener {
+	
+	public void repaintGraph();
+
+}

+ 14 - 0
src/ui/model/Model.java

@@ -13,6 +13,7 @@ import classes.AbstractCpsObject;
 import classes.HolonElement;
 import classes.HolonObject;
 import interfaces.CategoryListener;
+import interfaces.GraphListener;
 import interfaces.ObjectListener;
 import ui.view.Console;
 
@@ -41,6 +42,7 @@ public class Model {
 	private ArrayList<AbstractCpsObject> clipboardObjects = new ArrayList<AbstractCpsObject>();
 	private Console console;
 
+	private ArrayList<GraphListener> graphListeners = new ArrayList<GraphListener>();
 	// Iteration Speed
 	private int timerSpeed = 1000;
 
@@ -353,6 +355,14 @@ public class Model {
 	 */
 	public void setCurIteration(int curIT) {
 		this.curIteration = curIT;
+		notifyGraphListeners();
+	}
+
+	private void notifyGraphListeners() {
+		for(GraphListener gl: graphListeners){
+			gl.repaintGraph();
+		}
+		
 	}
 
 	/**
@@ -620,5 +630,9 @@ public class Model {
 	public ArrayList<HolonObject> getTrackingObj() {
 		return trackingObj;
 	}
+	
+	public void addGraphListener(GraphListener gl){
+		graphListeners.add(gl);
+	}
 
 }

+ 1 - 0
src/ui/view/GUI.java

@@ -265,6 +265,7 @@ public class GUI<E> implements CategoryListener {
 		this.controller = control;
 		this.model = control.getModel();
 		statPane = new StatisticPane(model, controller);
+		model.addGraphListener(statPane);
 		statScrollPane = new JScrollPane(statPane);
 		this.canvas = new MyCanvas(model, control);
 		this.unitGraph = new UnitGraph(model, control);

+ 106 - 79
src/ui/view/StatisticPane.java

@@ -14,23 +14,33 @@ import javax.swing.JCheckBox;
 import javax.swing.LayoutStyle.ComponentPlacement;
 import java.awt.Color;
 import javax.swing.SwingConstants;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
 
+import classes.HolonObject;
+import interfaces.GraphListener;
 import ui.controller.Control;
 import ui.model.Model;
 
 import javax.swing.JComboBox;
 import javax.swing.JButton;
 import java.awt.event.ActionListener;
+import java.util.HashMap;
 import java.awt.event.ActionEvent;
 
-public class StatisticPane extends JPanel{
+public class StatisticPane extends JPanel implements GraphListener{
 	private JScrollPane listScrollPane = new JScrollPane();
     private JList objectList;
     private DefaultListModel listModel =  new DefaultListModel();
     private Model model;
     private Control controller;
-    //private StatisticGraph statGraph;
-    private JPanel statGraph;
+    private StatisticGraph statGraph1;
+    //private JPanel statGraph1;
+    private StatisticGraph statGraph2;
+    //private JPanel statGraph2;
+    private HashMap<String, HolonObject> objectHashMap = new HashMap<String, HolonObject>();
+    private JLabel nameThreshHolder;
+    
     
     public StatisticPane(Model m, Control c){
     	model = m;
@@ -52,8 +62,8 @@ public class StatisticPane extends JPanel{
     	
     	JLabel lblName = new JLabel("Name:");
     	
-    	JLabel lblNewLabel = new JLabel("...");
-    	lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
+    	nameThreshHolder = new JLabel("...");
+    	nameThreshHolder.setHorizontalAlignment(SwingConstants.LEFT);
     	
     	JCheckBox checkBox = new JCheckBox("total consumption");
     	checkBox.setForeground(Color.RED);
@@ -61,25 +71,27 @@ public class StatisticPane extends JPanel{
     	JCheckBox checkBox_1 = new JCheckBox("total production");
     	checkBox_1.setForeground(Color.BLUE);
     	
-    	JLabel lblGraph = new JLabel("  Graph:");
-    	
-    	JComboBox comboBox = new JComboBox();
-    	
-    	//statGraph = new StatisticGraph(model, controller);
-    	statGraph = new JPanel();
+    	statGraph1 = new StatisticGraph(model, controller);
+    	//statGraph1 = new JPanel();
     	
     	JButton btnRefresh = new JButton("Refresh Tracked Objects");
     	btnRefresh.addActionListener(new ActionListener() {
     		public void actionPerformed(ActionEvent e) {
-    			listModel.removeAllElements();
-    			for(int i = 0; i < controller.getTrackingObj().size(); i++){
-    				listModel.addElement(controller.getTrackingObj().get(i).getName() +
-    						controller.getTrackingObj().get(i).getID());
-    			}
+    			refreshTrackedList();
     		}
     	});
     	
-    	JPanel panel = new JPanel();
+    	statGraph2 = new StatisticGraph(model, controller);
+    	//statGraph2 = new JPanel();
+    	
+    	JButton btnUntrack = new JButton("Untrack");
+    	btnUntrack.addActionListener(new ActionListener() {
+    		public void actionPerformed(ActionEvent e) {
+    			controller.getTrackingObj().remove(objectHashMap.get(nameThreshHolder.getText()));
+    			refreshTrackedList();
+    			nameThreshHolder.setText("...");
+    		}
+    	});
     	GroupLayout groupLayout = new GroupLayout(this);
     	groupLayout.setHorizontalGroup(
     		groupLayout.createParallelGroup(Alignment.LEADING)
@@ -88,89 +100,104 @@ public class StatisticPane extends JPanel{
     				.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
     					.addGroup(groupLayout.createSequentialGroup()
     						.addComponent(listScrollPane, GroupLayout.PREFERRED_SIZE, 177, GroupLayout.PREFERRED_SIZE)
-    						.addGap(263))
-    					.addGroup(groupLayout.createSequentialGroup()
-    						.addComponent(lblObject, GroupLayout.PREFERRED_SIZE, 56, GroupLayout.PREFERRED_SIZE)
-    						.addContainerGap(384, Short.MAX_VALUE))
-    					.addGroup(groupLayout.createSequentialGroup()
-    						.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
-    							.addGroup(groupLayout.createSequentialGroup()
-    								.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
-    									.addGroup(groupLayout.createSequentialGroup()
-    										.addGap(10)
-    										.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
-    											.addGroup(groupLayout.createSequentialGroup()
-    												.addComponent(lblGraph, GroupLayout.PREFERRED_SIZE, 54, GroupLayout.PREFERRED_SIZE)
-    												.addPreferredGap(ComponentPlacement.RELATED)
-    												.addComponent(comboBox, 0, 127, Short.MAX_VALUE))
-    											.addComponent(checkBox_1, GroupLayout.PREFERRED_SIZE, 101, GroupLayout.PREFERRED_SIZE)
-    											.addComponent(checkBox, GroupLayout.PREFERRED_SIZE, 111, GroupLayout.PREFERRED_SIZE)
-    											.addGroup(groupLayout.createSequentialGroup()
-    												.addComponent(lblName)
-    												.addPreferredGap(ComponentPlacement.RELATED)
-    												.addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 107, GroupLayout.PREFERRED_SIZE))))
-    									.addGroup(groupLayout.createSequentialGroup()
-    										.addGap(10)
-    										.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
-    											.addComponent(chckbxNewCheckBox)
-    											.addComponent(chckbxNewCheckBox_1))
-    										.addGap(35)))
-    								.addPreferredGap(ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
-    							.addGroup(groupLayout.createSequentialGroup()
+    						.addGap(323))
+    					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
+    						.addGroup(groupLayout.createSequentialGroup()
+    							.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
+    								.addGroup(groupLayout.createSequentialGroup()
+    									.addGap(10)
+    									.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
+    										.addGroup(groupLayout.createSequentialGroup()
+    											.addComponent(lblName)
+    											.addPreferredGap(ComponentPlacement.RELATED)
+    											.addComponent(nameThreshHolder, GroupLayout.PREFERRED_SIZE, 107, GroupLayout.PREFERRED_SIZE))
+    										.addComponent(checkBox, GroupLayout.PREFERRED_SIZE, 111, GroupLayout.PREFERRED_SIZE)
+    										.addComponent(checkBox_1, GroupLayout.PREFERRED_SIZE, 101, GroupLayout.PREFERRED_SIZE)))
     								.addComponent(lblOverallStatistics, GroupLayout.PREFERRED_SIZE, 126, GroupLayout.PREFERRED_SIZE)
-    								.addPreferredGap(ComponentPlacement.RELATED))
-    							.addGroup(groupLayout.createSequentialGroup()
-    								.addComponent(btnRefresh)
-    								.addGap(63)))
-    						.addPreferredGap(ComponentPlacement.RELATED)
-    						.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
-    							.addComponent(panel, GroupLayout.DEFAULT_SIZE, 226, Short.MAX_VALUE)
-    							.addComponent(statGraph, GroupLayout.PREFERRED_SIZE, 226, GroupLayout.PREFERRED_SIZE)))))
+    								.addGroup(groupLayout.createSequentialGroup()
+    									.addGap(10)
+    									.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
+    										.addComponent(chckbxNewCheckBox_1)
+    										.addComponent(chckbxNewCheckBox)))
+    								.addComponent(lblObject, GroupLayout.PREFERRED_SIZE, 56, GroupLayout.PREFERRED_SIZE)
+    								.addComponent(btnUntrack))
+    							.addGap(147)
+    							.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
+    								.addComponent(statGraph2, GroupLayout.DEFAULT_SIZE, 199, Short.MAX_VALUE)
+    								.addComponent(statGraph1, GroupLayout.DEFAULT_SIZE, 199, Short.MAX_VALUE)))
+    						.addGroup(groupLayout.createSequentialGroup()
+    							.addComponent(btnRefresh)
+    							.addContainerGap(349, Short.MAX_VALUE)))))
     	);
     	groupLayout.setVerticalGroup(
     		groupLayout.createParallelGroup(Alignment.LEADING)
     			.addGroup(groupLayout.createSequentialGroup()
+    				.addGap(17)
     				.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
     					.addGroup(groupLayout.createSequentialGroup()
-    						.addGap(63)
     						.addComponent(lblOverallStatistics)
     						.addPreferredGap(ComponentPlacement.UNRELATED)
     						.addComponent(chckbxNewCheckBox)
-    						.addPreferredGap(ComponentPlacement.UNRELATED)
-    						.addComponent(chckbxNewCheckBox_1)
-    						.addGap(48)
+    						.addPreferredGap(ComponentPlacement.RELATED)
+    						.addComponent(chckbxNewCheckBox_1))
+    					.addComponent(statGraph1, GroupLayout.PREFERRED_SIZE, 125, GroupLayout.PREFERRED_SIZE))
+    				.addGap(41)
+    				.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
+    					.addGroup(groupLayout.createSequentialGroup()
     						.addComponent(lblObject)
     						.addPreferredGap(ComponentPlacement.UNRELATED)
     						.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
     							.addComponent(lblName)
-    							.addComponent(lblNewLabel)))
-    					.addGroup(groupLayout.createSequentialGroup()
-    						.addGap(17)
-    						.addComponent(statGraph, GroupLayout.PREFERRED_SIZE, 140, GroupLayout.PREFERRED_SIZE)))
-    				.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
-    					.addGroup(groupLayout.createSequentialGroup()
-    						.addGap(80)
+    							.addComponent(nameThreshHolder))
+    						.addPreferredGap(ComponentPlacement.RELATED)
     						.addComponent(checkBox)
-    						.addPreferredGap(ComponentPlacement.UNRELATED)
-    						.addComponent(checkBox_1))
-    					.addGroup(Alignment.TRAILING, groupLayout.createSequentialGroup()
     						.addPreferredGap(ComponentPlacement.RELATED)
-    						.addComponent(panel, GroupLayout.PREFERRED_SIZE, 123, GroupLayout.PREFERRED_SIZE)))
-    				.addPreferredGap(ComponentPlacement.UNRELATED)
-    				.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
-    					.addComponent(lblGraph)
-    					.addComponent(comboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
-    				.addGap(27)
-    				.addComponent(btnRefresh)
-    				.addPreferredGap(ComponentPlacement.RELATED)
-    				.addComponent(listScrollPane, GroupLayout.PREFERRED_SIZE, 206, GroupLayout.PREFERRED_SIZE)
-    				.addContainerGap(91, Short.MAX_VALUE))
+    						.addComponent(checkBox_1)
+    						.addPreferredGap(ComponentPlacement.UNRELATED)
+    						.addComponent(btnUntrack)
+    						.addGap(30)
+    						.addComponent(btnRefresh)
+    						.addPreferredGap(ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+    						.addComponent(listScrollPane, GroupLayout.PREFERRED_SIZE, 160, GroupLayout.PREFERRED_SIZE)
+    						.addPreferredGap(ComponentPlacement.RELATED))
+    					.addComponent(statGraph2, GroupLayout.PREFERRED_SIZE, 122, GroupLayout.PREFERRED_SIZE))
+    				.addContainerGap(212, GroupLayout.PREFERRED_SIZE))
     	);
     	setLayout(groupLayout);
+    	
+    	objectList.addListSelectionListener(new ListSelectionListener(){
+    		
+    		@Override
+    		public void valueChanged(ListSelectionEvent arg0){
+    			if(objectList.getSelectedValue() != null){
+    			nameThreshHolder.setText(objectList.getSelectedValue().toString());
+    			}
+    		}
+    	});
 
     }
     
+    public void refreshTrackedList(){
+		listModel.removeAllElements();
+		objectHashMap.clear();
+		for(int i = 0; i < controller.getTrackingObj().size(); i++){
+			String name = controller.getTrackingObj().get(i).getName() + " " +
+			controller.getTrackingObj().get(i).getID();
+			
+			listModel.addElement(name);
+			objectHashMap.put(name, controller.getTrackingObj().get(i));
+			if(i < 8){
+				statGraph1.addObject(controller.getTrackingObj().get(i));
+			}
+		}
+    }
     public void updateGraphs(){
-    	statGraph.repaint();
+    	statGraph1.repaint();
     }
+
+	@Override
+	public void repaintGraph() {
+		// TODO Auto-generated method stub
+		statGraph1.repaint();
+	}
 }