|
@@ -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();
|
|
|
+ }
|
|
|
}
|