GenAlgoWindow.java 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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 java.awt.event.ActionListener;
  22. import java.awt.event.ActionEvent;
  23. import java.awt.event.MouseAdapter;
  24. import java.awt.event.MouseEvent;
  25. import java.awt.event.MouseListener;
  26. import java.util.ArrayList;
  27. import java.util.HashMap;
  28. import javax.swing.JTextField;
  29. public class GenAlgoWindow implements GAResultListener<HolegIndividual> {
  30. JFrame frame;
  31. Control controller;
  32. Model model;
  33. JTree genTree;
  34. DefaultTreeModel treeModel;
  35. DefaultMutableTreeNode treeRoot;
  36. HashMap<DefaultMutableTreeNode, HolegIndividual> treeIndiHashmap;
  37. GenAlgoHandler algoHandler;
  38. private JTextField textField;
  39. /**
  40. * Create the application.
  41. */
  42. public GenAlgoWindow(Control controller, Model model) {
  43. this.model = model;
  44. this.controller = controller;
  45. algoHandler = new GenAlgoHandler(controller, model);
  46. algoHandler.addListener(this);
  47. treeIndiHashmap = new HashMap<DefaultMutableTreeNode, HolegIndividual>();
  48. initialize();
  49. }
  50. /**
  51. * Initialize the contents of the frame.
  52. */
  53. private void initialize() {
  54. frame = new JFrame();
  55. frame.setBounds(100, 100, 450, 409);
  56. frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  57. frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.X_AXIS));
  58. JSplitPane mainSplitPane = new JSplitPane();
  59. mainSplitPane.setResizeWeight(0.3);
  60. frame.getContentPane().add(mainSplitPane);
  61. JScrollPane treeScrollPane = new JScrollPane();
  62. mainSplitPane.setLeftComponent(treeScrollPane);
  63. genTree = new JTree();
  64. treeScrollPane.setViewportView(genTree);
  65. treeModel = (DefaultTreeModel) genTree.getModel();
  66. treeRoot = new DefaultMutableTreeNode("Generations");
  67. treeModel.setRoot(treeRoot);
  68. genTree.setModel(treeModel);
  69. JSplitPane rightSplitPane = new JSplitPane();
  70. rightSplitPane.setResizeWeight(0.5);
  71. rightSplitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
  72. mainSplitPane.setRightComponent(rightSplitPane);
  73. JPanel panel = new JPanel();
  74. rightSplitPane.setLeftComponent(panel);
  75. JButton btnCreategeneration = new JButton("createGeneration");
  76. btnCreategeneration.addActionListener(new ActionListener() {
  77. public void actionPerformed(ActionEvent arg0) {
  78. algoHandler.createGeneration();
  79. }
  80. });
  81. textField = new JTextField();
  82. panel.add(textField);
  83. textField.setColumns(10);
  84. panel.add(btnCreategeneration);
  85. MouseListener ml = new MouseAdapter() {
  86. public void mousePressed(MouseEvent e) {
  87. int selRow = genTree.getRowForLocation(e.getX(), e.getY());
  88. TreePath selPath = genTree.getPathForLocation(e.getX(), e.getY());
  89. if(selRow != -1) {
  90. if(e.getClickCount() == 1) {
  91. //mySingleClick(selRow, selPath);
  92. }
  93. else if(e.getClickCount() == 2) {
  94. nodeDoubleClick(selRow, selPath);
  95. }
  96. }
  97. }
  98. };
  99. genTree.addMouseListener(ml);
  100. }
  101. public void nodeDoubleClick(int selRow, TreePath selPath){
  102. DefaultMutableTreeNode node = (DefaultMutableTreeNode)selPath.getLastPathComponent();
  103. if(treeIndiHashmap.get(node) != null){
  104. algoHandler.drawIndividual(treeIndiHashmap.get(node));
  105. }
  106. }
  107. @Override
  108. public void populationCreated(int generation, ArrayList<HolegIndividual> population) {
  109. DefaultMutableTreeNode genNode = new DefaultMutableTreeNode("Generation " + generation);
  110. for(int i = 0; i < population.size(); i++){
  111. DefaultMutableTreeNode child = new DefaultMutableTreeNode("Individual " + i);
  112. treeIndiHashmap.put(child, population.get(i));
  113. genNode.add(child);
  114. }
  115. treeRoot.insert(genNode, 0);
  116. treeModel.reload();
  117. }
  118. }