package ui.view; import javax.swing.DefaultListModel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import java.awt.BorderLayout; import java.awt.FlowLayout; import javax.swing.GroupLayout; import javax.swing.GroupLayout.Alignment; import javax.swing.GroupLayout.Group; import javax.swing.JLabel; import java.awt.Font; 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.ArrayList; import java.util.HashMap; import java.awt.event.ActionEvent; 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 statGraph1; private JPanel statGraph1; //private StatisticGraph statGraph2; private JPanel statGraph2; private HashMap objectHashMap = new HashMap(); private JLabel nameThreshHolder; private GroupLayout groupLayout; public StatisticPane(Model m, Control c){ model = m; controller = c; objectList = new JList(listModel); listScrollPane.setViewportView(objectList); JLabel lblOverallStatistics = new JLabel("Overall Statistics:"); lblOverallStatistics.setFont(new Font("Tahoma", Font.PLAIN, 13)); JCheckBox chckbxNewCheckBox = new JCheckBox("total consumption"); chckbxNewCheckBox.setForeground(Color.RED); JCheckBox chckbxNewCheckBox_1 = new JCheckBox("total production"); chckbxNewCheckBox_1.setForeground(Color.BLUE); JLabel lblObject = new JLabel("Object:"); lblObject.setFont(new Font("Tahoma", Font.PLAIN, 13)); JLabel lblName = new JLabel("Name:"); nameThreshHolder = new JLabel("..."); nameThreshHolder.setHorizontalAlignment(SwingConstants.LEFT); JCheckBox checkBox = new JCheckBox("total consumption"); checkBox.setForeground(Color.RED); JCheckBox checkBox_1 = new JCheckBox("total production"); checkBox_1.setForeground(Color.BLUE); //statGraph1 = new StatisticGraph(model, controller); statGraph1 = new JPanel(); JButton btnRefresh = new JButton("Refresh Tracked Objects"); btnRefresh.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { refreshTrackedList(); } }); //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("..."); } }); JButton btnAddGraph = new JButton("add Graph"); btnAddGraph.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JPanel tmp = new JPanel(); } }); /* Group gr = groupLayout.createParallelGroup(); for(int i = 0; i < 4; i++){ gr.addComponent(statGraph2, GroupLayout.DEFAULT_SIZE, 199, Short.MAX_VALUE); } */ groupLayout = new GroupLayout(this); groupLayout.setHorizontalGroup( groupLayout.createParallelGroup(Alignment.LEADING) .addGroup(groupLayout.createSequentialGroup() .addContainerGap() .addGroup(groupLayout.createParallelGroup(Alignment.LEADING) .addGroup(groupLayout.createSequentialGroup() .addComponent(listScrollPane, GroupLayout.PREFERRED_SIZE, 177, GroupLayout.PREFERRED_SIZE) .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) .addGroup(groupLayout.createSequentialGroup() .addGap(10) .addGroup(groupLayout.createParallelGroup(Alignment.LEADING) .addComponent(chckbxNewCheckBox_1) .addComponent(chckbxNewCheckBox))) .addComponent(lblObject, GroupLayout.PREFERRED_SIZE, 56, GroupLayout.PREFERRED_SIZE) .addGroup(groupLayout.createSequentialGroup() .addComponent(btnUntrack) .addGap(18) .addComponent(btnAddGraph))) .addGap(125) .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() .addComponent(lblOverallStatistics) .addPreferredGap(ComponentPlacement.UNRELATED) .addComponent(chckbxNewCheckBox) .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(nameThreshHolder)) .addPreferredGap(ComponentPlacement.RELATED) .addComponent(checkBox) .addPreferredGap(ComponentPlacement.RELATED) .addComponent(checkBox_1) .addPreferredGap(ComponentPlacement.UNRELATED) .addGroup(groupLayout.createParallelGroup(Alignment.BASELINE) .addComponent(btnUntrack) .addComponent(btnAddGraph)) .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(89, 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(){ statGraph1.repaint(); } @Override public void repaintGraph() { // TODO Auto-generated method stub statGraph1.repaint(); } @Override public void addTrackedObject(ArrayList hl) { // TODO Auto-generated method stub } }