GenAlgoWindow.java 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. package algorithms.geneticAlgorithm.holegGA;
  2. import java.awt.EventQueue;
  3. import javax.swing.JFrame;
  4. import javax.swing.JSplitPane;
  5. import java.awt.BorderLayout;
  6. import javax.swing.GroupLayout;
  7. import javax.swing.GroupLayout.Alignment;
  8. import javax.swing.BoxLayout;
  9. import javax.swing.JScrollPane;
  10. import javax.swing.JTree;
  11. import javax.swing.JPanel;
  12. import javax.swing.tree.DefaultMutableTreeNode;
  13. import javax.swing.tree.DefaultTreeModel;
  14. import javax.swing.tree.TreePath;
  15. import ui.controller.Control;
  16. import ui.model.Model;
  17. import ui.view.MyCanvas;
  18. import ui.view.UnitGraph;
  19. import javax.swing.JButton;
  20. import algorithms.geneticAlgorithm.Components.GAResultListener;
  21. import algorithms.geneticAlgorithm.holegGA.Components.HolegIndividual;
  22. import java.awt.event.ActionListener;
  23. import java.awt.event.ActionEvent;
  24. import java.awt.event.MouseAdapter;
  25. import java.awt.event.MouseEvent;
  26. import java.awt.event.MouseListener;
  27. import java.util.ArrayList;
  28. import java.util.HashMap;
  29. import javax.swing.JTextField;
  30. import javax.swing.JLabel;
  31. import javax.swing.JCheckBox;
  32. import javax.swing.JTextArea;
  33. public class GenAlgoWindow implements GAResultListener<HolegIndividual> {
  34. JFrame frame;
  35. Control controller;
  36. Model model;
  37. JTree genTree;
  38. DefaultTreeModel treeModel;
  39. DefaultMutableTreeNode treeRoot;
  40. HashMap<DefaultMutableTreeNode, HolegIndividual> treeIndiHashmap;
  41. GenAlgoHandler algoHandler;
  42. private JTextField objectAmountField;
  43. private JTextField edgeAmountField;
  44. private JCheckBox chckbxOnlyNodes;
  45. private JTextArea logArea;
  46. /**
  47. * Create the application.
  48. */
  49. public GenAlgoWindow(Control controller, Model model) {
  50. this.model = model;
  51. this.controller = controller;
  52. algoHandler = new GenAlgoHandler(controller, model);
  53. algoHandler.addListener(this);
  54. treeIndiHashmap = new HashMap<DefaultMutableTreeNode, HolegIndividual>();
  55. initialize();
  56. HolegIndividual originIndividual = new HolegIndividual(model.getObjectsOnCanvas());
  57. ArrayList<HolegIndividual> originPopulation = new ArrayList<HolegIndividual>();
  58. originPopulation.add(originIndividual);
  59. populationCreated(-1, originPopulation);
  60. }
  61. /**
  62. * Initialize the contents of the frame.
  63. */
  64. private void initialize() {
  65. frame = new JFrame();
  66. frame.setBounds(100, 100, 450, 409);
  67. frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  68. frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.X_AXIS));
  69. JSplitPane mainSplitPane = new JSplitPane();
  70. mainSplitPane.setResizeWeight(0.3);
  71. frame.getContentPane().add(mainSplitPane);
  72. JScrollPane treeScrollPane = new JScrollPane();
  73. mainSplitPane.setLeftComponent(treeScrollPane);
  74. genTree = new JTree();
  75. treeScrollPane.setViewportView(genTree);
  76. treeModel = (DefaultTreeModel) genTree.getModel();
  77. treeRoot = new DefaultMutableTreeNode("Generations");
  78. treeModel.setRoot(treeRoot);
  79. genTree.setModel(treeModel);
  80. JSplitPane rightSplitPane = new JSplitPane();
  81. rightSplitPane.setResizeWeight(0.5);
  82. rightSplitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
  83. mainSplitPane.setRightComponent(rightSplitPane);
  84. JPanel panel = new JPanel();
  85. rightSplitPane.setLeftComponent(panel);
  86. JButton btnCreategeneration = new JButton("createGeneration");
  87. btnCreategeneration.setBounds(44, 11, 117, 23);
  88. btnCreategeneration.addActionListener(new ActionListener() {
  89. public void actionPerformed(ActionEvent arg0) {
  90. int objAmount = Integer.parseInt(objectAmountField.getText());
  91. int edgeAmount = Integer.parseInt(edgeAmountField.getText());
  92. algoHandler.onlyNodes = chckbxOnlyNodes.isSelected();
  93. algoHandler.createGeneration(objAmount, edgeAmount);
  94. }
  95. });
  96. panel.setLayout(null);
  97. objectAmountField = new JTextField();
  98. objectAmountField.setText("0");
  99. objectAmountField.setBounds(89, 45, 86, 20);
  100. panel.add(objectAmountField);
  101. objectAmountField.setColumns(10);
  102. panel.add(btnCreategeneration);
  103. edgeAmountField = new JTextField();
  104. edgeAmountField.setText("0");
  105. edgeAmountField.setBounds(89, 76, 86, 20);
  106. panel.add(edgeAmountField);
  107. edgeAmountField.setColumns(10);
  108. JLabel lblMaxObjects = new JLabel("Max Objects");
  109. lblMaxObjects.setBounds(10, 48, 69, 14);
  110. panel.add(lblMaxObjects);
  111. JLabel lblMaxEdges = new JLabel("Max Edges");
  112. lblMaxEdges.setBounds(10, 79, 69, 14);
  113. panel.add(lblMaxEdges);
  114. chckbxOnlyNodes = new JCheckBox("\r\n");
  115. chckbxOnlyNodes.setBounds(89, 103, 25, 23);
  116. panel.add(chckbxOnlyNodes);
  117. JLabel lblOnlyNodes = new JLabel("Only Nodes?");
  118. lblOnlyNodes.setBounds(10, 107, 69, 14);
  119. panel.add(lblOnlyNodes);
  120. logArea = new JTextArea();
  121. rightSplitPane.setRightComponent(logArea);
  122. MouseListener ml = new MouseAdapter() {
  123. public void mousePressed(MouseEvent e) {
  124. int selRow = genTree.getRowForLocation(e.getX(), e.getY());
  125. TreePath selPath = genTree.getPathForLocation(e.getX(), e.getY());
  126. if(selRow != -1) {
  127. if(e.getClickCount() == 1) {
  128. //mySingleClick(selRow, selPath);
  129. }
  130. else if(e.getClickCount() == 2) {
  131. nodeDoubleClick(selRow, selPath);
  132. }
  133. }
  134. }
  135. };
  136. genTree.addMouseListener(ml);
  137. }
  138. public void nodeDoubleClick(int selRow, TreePath selPath){
  139. DefaultMutableTreeNode node = (DefaultMutableTreeNode)selPath.getLastPathComponent();
  140. if(treeIndiHashmap.get(node) != null){
  141. algoHandler.drawIndividual(treeIndiHashmap.get(node));
  142. logArea.setText(treeIndiHashmap.get(node).log);
  143. }
  144. }
  145. @Override
  146. public void populationCreated(int generation, ArrayList<HolegIndividual> population) {
  147. DefaultMutableTreeNode genNode;
  148. if(! (generation == -1)){
  149. genNode = new DefaultMutableTreeNode("Generation " + generation);
  150. }else{
  151. genNode = new DefaultMutableTreeNode("Origin Network");
  152. }
  153. for(int i = 0; i < population.size(); i++){
  154. DefaultMutableTreeNode child = new DefaultMutableTreeNode("Individual " + i);
  155. population.get(i).setId(generation, i);
  156. treeIndiHashmap.put(child, population.get(i));
  157. genNode.add(child);
  158. }
  159. treeRoot.insert(genNode, 0);
  160. treeModel.reload();
  161. }
  162. }