private void AcceptButtonMouseCLicked() {

    if (VisualizationBase.CURRENT_ALGORITHM != (Sort.algorithms) algorithmsList.getSelectedItem()) {

      VisualizationBase.CURRENT_ALGORITHM = (Sort.algorithms) algorithmsList.getSelectedItem();
    }

    if (VisualizationBase.DIRECTION != (ElementArray.directions) directionsList.getSelectedItem()
        || VisualizationBase.ORDER != (ElementArray.orders) ordersList.getSelectedItem()
        || VisualizationBase.UNIQUENESS
            != (ElementArray.uniqueness) uniquenessList.getSelectedItem()
        || VisualizationBase.SORT_COUNT != Integer.parseInt(sortSize.getText())) {

      VisualizationBase.VISUALIZATION_WINDOW.deleteElementArray();
      VisualizationBase.DIRECTION = (ElementArray.directions) directionsList.getSelectedItem();
      VisualizationBase.ORDER = (ElementArray.orders) ordersList.getSelectedItem();
      VisualizationBase.UNIQUENESS = (ElementArray.uniqueness) uniquenessList.getSelectedItem();
      VisualizationBase.SORT_COUNT = Integer.parseInt(sortSize.getText());
      VisualizationBase.VISUALIZATION_WINDOW.createElementsArray();
    }

    this.dispose();
  }
  public void startPathfinding() {

    Box.flags[] flags = {Box.flags.SEARCHED, Box.flags.SHORTEST_PATH, Box.flags.QUEUED};
    VisualizationBase.VISUALIZATION_WINDOW.clearBoxFieldFlags(flags);
    startTime = System.currentTimeMillis();

    if (Box.beginningAndEndExist()) {

      PathfindRegion regionPathfind = null;
      HashSet<Box> boxesAlongRegionPath = null;

      if (VisualizationBase.HIERARCHICAL_PATHFINDING) {

        regionPathfind =
            new PathfindRegion(
                new NodeRegion(Box.startBox.getRegion(), null),
                new NodeRegion(Box.endBox.getRegion(), null));
        regionPathfind.start();
        HashSet<Region> regionsOnPath = regionPathfind.regionsAlongPath();
        HashSet<Region> expandedRegionsOnPath = new HashSet<Region>();

        for (Region currentRegion : regionsOnPath) {

          expandedRegionsOnPath.addAll(currentRegion.getNeighboringRegions());
          expandedRegionsOnPath.add(currentRegion);
        }

        boxesAlongRegionPath = new HashSet<Box>();

        for (Region currentRegion : expandedRegionsOnPath) {

          VisualizationBase.VISUALIZATION_WINDOW.registerChange(
              currentRegion, 2000, new Color(0, 0, 255, 125));
          boxesAlongRegionPath.addAll(currentRegion.getBoxes());
        }
      }

      // long intermediateTime = System.currentTimeMillis();
      // System.out.println(intermediateTime - startTime + " ms");

      pathfinder =
          VisualizationBase.CURRENT_ALGORITHM.pathfind(
              new NodeBox(Box.startBox, null), new NodeBox(Box.endBox, null));

      if (VisualizationBase.HIERARCHICAL_PATHFINDING) {

        pathfinder.setAvailableRegion(boxesAlongRegionPath);

        if (regionPathfind.isPathFound()) {

          thread = new Thread(pathfinder);
          thread.start();

          synchronized (this) {
            this.notify();
          }

        } else {

          System.out.println("Pathfind not attempted as region pathfinding did not find a result.");
        }

        return;
      }

      thread = new Thread(pathfinder);
      thread.start();

      synchronized (this) {
        this.notify();
      }
    }
  }