splitPane.java 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. package ui.view;
  2. import javax.swing.JSplitPane;
  3. import javax.swing.JScrollPane;
  4. import javax.swing.JPanel;
  5. import java.util.ArrayList;
  6. import java.util.Hashtable;
  7. import javax.swing.GroupLayout;
  8. import javax.swing.GroupLayout.Alignment;
  9. import javax.swing.JLabel;
  10. import javax.swing.LayoutStyle.ComponentPlacement;
  11. import javax.swing.event.TreeSelectionEvent;
  12. import javax.swing.event.TreeSelectionListener;
  13. import javax.swing.tree.DefaultMutableTreeNode;
  14. import javax.swing.tree.DefaultTreeModel;
  15. import javax.swing.tree.MutableTreeNode;
  16. import javax.swing.tree.TreeNode;
  17. import classes.HolonObject;
  18. import classes.PropertyDataSet;
  19. import interfaces.GraphListener;
  20. import javax.swing.JTextField;
  21. import javax.swing.JComboBox;
  22. import javax.swing.JButton;
  23. import javax.swing.JTree;
  24. import java.awt.Color;
  25. import javax.swing.border.LineBorder;
  26. public class splitPane extends JSplitPane implements GraphListener {
  27. private JTextField graphNrTxtField;
  28. private JTextField redField;
  29. private JTextField greenField;
  30. private JTextField blueField;
  31. private JTree objectTree;
  32. private DefaultTreeModel treeModel;
  33. private DefaultMutableTreeNode objectsNode;
  34. private DefaultMutableTreeNode wholeHolon;
  35. private Hashtable<String, Hashtable<String, PropertyDataSet>> objectHashtable;
  36. JLabel showObjectlbl;
  37. JLabel showPropertylbl;
  38. public splitPane() {
  39. objectHashtable = new Hashtable<String, Hashtable<String, PropertyDataSet>>();
  40. JPanel panel = new JPanel();
  41. setLeftComponent(panel);
  42. JScrollPane treeScrollPane = new JScrollPane();
  43. JLabel lblObject = new JLabel("Object(s):");
  44. showObjectlbl = new JLabel("...");
  45. JLabel lblProperty = new JLabel("Property:");
  46. showPropertylbl = new JLabel("...");
  47. JLabel lblGraph = new JLabel("Graph:");
  48. graphNrTxtField = new JTextField();
  49. graphNrTxtField.setColumns(10);
  50. JLabel lblColor = new JLabel("Color:");
  51. JComboBox colorComboBox = new JComboBox();
  52. redField = new JTextField();
  53. redField.setColumns(10);
  54. greenField = new JTextField();
  55. greenField.setColumns(10);
  56. blueField = new JTextField();
  57. blueField.setColumns(10);
  58. JLabel lblR = new JLabel("R:");
  59. JLabel lblG = new JLabel("G:");
  60. JLabel lblB = new JLabel("B:");
  61. JButton btnAdd = new JButton("Add");
  62. JPanel colorPanel = new JPanel();
  63. colorPanel.setBorder(new LineBorder(new Color(0, 0, 0)));
  64. colorPanel.setBackground(Color.WHITE);
  65. GroupLayout gl_panel = new GroupLayout(panel);
  66. gl_panel.setHorizontalGroup(
  67. gl_panel.createParallelGroup(Alignment.LEADING)
  68. .addGroup(gl_panel.createSequentialGroup()
  69. .addContainerGap()
  70. .addGroup(gl_panel.createParallelGroup(Alignment.LEADING, false)
  71. .addComponent(treeScrollPane, GroupLayout.PREFERRED_SIZE, 165, GroupLayout.PREFERRED_SIZE)
  72. .addGroup(gl_panel.createSequentialGroup()
  73. .addGroup(gl_panel.createParallelGroup(Alignment.LEADING)
  74. .addComponent(lblGraph)
  75. .addComponent(lblObject)
  76. .addComponent(lblProperty)
  77. .addComponent(lblColor)
  78. .addGroup(gl_panel.createSequentialGroup()
  79. .addComponent(lblR)
  80. .addPreferredGap(ComponentPlacement.RELATED)
  81. .addGroup(gl_panel.createParallelGroup(Alignment.LEADING, false)
  82. .addComponent(colorPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  83. .addComponent(redField, GroupLayout.DEFAULT_SIZE, 37, Short.MAX_VALUE))))
  84. .addPreferredGap(ComponentPlacement.RELATED)
  85. .addGroup(gl_panel.createParallelGroup(Alignment.LEADING, false)
  86. .addComponent(showObjectlbl, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  87. .addComponent(showPropertylbl, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  88. .addComponent(colorComboBox, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  89. .addGroup(gl_panel.createSequentialGroup()
  90. .addGroup(gl_panel.createParallelGroup(Alignment.TRAILING)
  91. .addComponent(btnAdd)
  92. .addGroup(gl_panel.createSequentialGroup()
  93. .addComponent(lblG)
  94. .addPreferredGap(ComponentPlacement.RELATED)
  95. .addComponent(greenField, GroupLayout.PREFERRED_SIZE, 37, GroupLayout.PREFERRED_SIZE)))
  96. .addPreferredGap(ComponentPlacement.RELATED)
  97. .addComponent(lblB)
  98. .addPreferredGap(ComponentPlacement.RELATED)
  99. .addComponent(blueField, GroupLayout.PREFERRED_SIZE, 37, GroupLayout.PREFERRED_SIZE))
  100. .addComponent(graphNrTxtField))))
  101. .addContainerGap())
  102. );
  103. gl_panel.setVerticalGroup(
  104. gl_panel.createParallelGroup(Alignment.LEADING)
  105. .addGroup(gl_panel.createSequentialGroup()
  106. .addContainerGap()
  107. .addComponent(treeScrollPane, GroupLayout.PREFERRED_SIZE, 153, GroupLayout.PREFERRED_SIZE)
  108. .addGap(27)
  109. .addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
  110. .addComponent(lblObject, GroupLayout.PREFERRED_SIZE, 14, GroupLayout.PREFERRED_SIZE)
  111. .addComponent(showObjectlbl))
  112. .addPreferredGap(ComponentPlacement.RELATED)
  113. .addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
  114. .addComponent(lblProperty)
  115. .addComponent(showPropertylbl))
  116. .addPreferredGap(ComponentPlacement.RELATED)
  117. .addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
  118. .addComponent(lblGraph)
  119. .addComponent(graphNrTxtField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
  120. .addPreferredGap(ComponentPlacement.RELATED)
  121. .addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
  122. .addComponent(lblColor)
  123. .addComponent(colorComboBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
  124. .addGap(18)
  125. .addGroup(gl_panel.createParallelGroup(Alignment.BASELINE)
  126. .addComponent(lblR)
  127. .addComponent(redField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
  128. .addComponent(lblG)
  129. .addComponent(greenField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
  130. .addComponent(lblB)
  131. .addComponent(blueField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
  132. .addPreferredGap(ComponentPlacement.RELATED)
  133. .addComponent(colorPanel, GroupLayout.PREFERRED_SIZE, 33, GroupLayout.PREFERRED_SIZE)
  134. .addPreferredGap(ComponentPlacement.RELATED, 30, Short.MAX_VALUE)
  135. .addComponent(btnAdd)
  136. .addContainerGap())
  137. );
  138. objectTree = new JTree();
  139. treeModel = (DefaultTreeModel)objectTree.getModel();
  140. DefaultMutableTreeNode root = new DefaultMutableTreeNode("Statistics");
  141. wholeHolon = new DefaultMutableTreeNode("whole Holon");
  142. wholeHolon.add(new DefaultMutableTreeNode("total Production"));
  143. wholeHolon.add(new DefaultMutableTreeNode("total Consumption"));
  144. wholeHolon.add(new DefaultMutableTreeNode("Percentage of Supplied Objects"));
  145. wholeHolon.add(new DefaultMutableTreeNode("Percentage of not Supplied Objects"));
  146. wholeHolon.add(new DefaultMutableTreeNode("Percentage of partially Supplied Objects"));
  147. objectsNode = new DefaultMutableTreeNode("Objects");
  148. DefaultMutableTreeNode defaultNode = new DefaultMutableTreeNode("empty");
  149. objectsNode.add(defaultNode);
  150. treeModel.setRoot(root);
  151. root.add(wholeHolon);
  152. root.add(objectsNode);
  153. objectTree.setModel(treeModel);
  154. treeScrollPane.setViewportView(objectTree);
  155. objectTree.addTreeSelectionListener(new TreeSelectionListener(){
  156. @Override
  157. public void valueChanged(TreeSelectionEvent e) {
  158. showObjectlbl.setText("...");
  159. showPropertylbl.setText("...");
  160. DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)objectTree.getLastSelectedPathComponent();
  161. if(selectedNode == null){
  162. return;
  163. }else{
  164. if(selectedNode.getLevel() == 1){
  165. showObjectlbl.setText(selectedNode.toString());
  166. }
  167. if(selectedNode.getLevel() == 2){
  168. if(((DefaultMutableTreeNode)selectedNode.getParent()).toString().equals("whole Holon")){
  169. showPropertylbl.setText(selectedNode.toString());
  170. showObjectlbl.setText(selectedNode.getParent().toString());
  171. }else{
  172. showObjectlbl.setText(selectedNode.toString());
  173. }
  174. }
  175. if(selectedNode.getLevel() == 3){
  176. String object = ((DefaultMutableTreeNode)selectedNode.getParent()).toString();
  177. String property = selectedNode.toString();
  178. int r = objectHashtable.get(object).get(property).getColor().getRed();
  179. redField.setText(Integer.toString(r));
  180. int g = objectHashtable.get(object).get(property).getColor().getGreen();
  181. greenField.setText(Integer.toString(g));
  182. int b = objectHashtable.get(object).get(property).getColor().getBlue();
  183. blueField.setText(Integer.toString(b));
  184. showObjectlbl.setText(object);
  185. showPropertylbl.setText(property);
  186. graphNrTxtField.setText(objectHashtable.get(object).get(property).getAssignedGraph());
  187. }
  188. }
  189. }
  190. });
  191. panel.setLayout(gl_panel);
  192. JScrollPane graphScrollPane = new JScrollPane();
  193. setRightComponent(graphScrollPane);
  194. repaintGraph();
  195. }
  196. @Override
  197. public void repaintGraph() {
  198. treeModel.reload();
  199. }
  200. @Override
  201. public void addTrackedObject(ArrayList<HolonObject> hlList) {
  202. if(hlList.size() > 0 && hlList != null){
  203. objectsNode.removeAllChildren();
  204. for(HolonObject hO : hlList){
  205. Hashtable<String, PropertyDataSet> tmpHash = new Hashtable<String, PropertyDataSet>();
  206. String name = hO.getName() + " " + hO.getID();
  207. DefaultMutableTreeNode tmp = new DefaultMutableTreeNode(name);
  208. tmp.add(new DefaultMutableTreeNode("total Production"));
  209. tmp.add(new DefaultMutableTreeNode("total Consumption"));
  210. tmp.add(new DefaultMutableTreeNode("number of activated Elements"));
  211. tmpHash.put("total Production", new PropertyDataSet());
  212. tmpHash.put("total Consumption", new PropertyDataSet());
  213. tmpHash.put("number of activated Elements", new PropertyDataSet());
  214. objectHashtable.put(name, tmpHash);
  215. objectsNode.add(tmp);
  216. }
  217. }else{
  218. objectsNode.add(new DefaultMutableTreeNode("empty"));
  219. }
  220. }
  221. }