/**
   * Create a instance of this check entry and set the configuration entry that is used to setup
   * this class.
   *
   * @param usedEntry the entry used to setup this class, the entry needs to pass the check with the
   *     static method
   */
  @SuppressWarnings("nls")
  public NumberEntryAwt(final ConfigEntry usedEntry) {
    super(new BorderLayout(10, 0));

    if (!isUsableEntry(usedEntry)) {
      throw new IllegalArgumentException("ConfigEntry type illegal.");
    }
    entry = (NumberEntry) usedEntry;

    currentValue = entry.getValue();

    display = new Label(Integer.toString(currentValue));
    add(display, BorderLayout.EAST);

    final Scrollbar scroll = new Scrollbar();
    scroll.setOrientation(Scrollbar.HORIZONTAL);
    scroll.setValues(currentValue, 1, entry.getRange().getMin(), entry.getRange().getMax() + 1);
    scroll.addAdjustmentListener(new NumberEntryScrollListener(this));
    add(scroll, BorderLayout.CENTER);

    setMinimumSize(new Dimension(300, 10));
  }
  public MokumFrame() {
    setTitle("Heuristieken 2014 - Mokum Airlines! - Group 4 \"De Vliegende Hollanders\"");
    setLayout(new BorderLayout());
    setSize(1024, 768);

    frame = this;

    Dienstregeling dienstregeling = maakDienstregeling();

    schaal = new Scrollbar();
    schaal.setMaximum(100);
    schaal.setMinimum(1);
    schaal.setOrientation(Scrollbar.HORIZONTAL);
    schaal.setValue(45);
    schaal.setPreferredSize(new Dimension(250, 20));
    redrawButton = new Button("Redraw!");
    left = new BasicArrowButton(BasicArrowButton.WEST);
    right = new BasicArrowButton(BasicArrowButton.EAST);

    traffic = new GlobalTraffic(dienstregeling);
    dienst = new DienstregelingCanvas(dienstregeling);

    schaal.addAdjustmentListener(
        new AdjustmentListener() {
          // Houdt bij of er aan de scrollbar gezet is of niet
          public void adjustmentValueChanged(AdjustmentEvent e) {
            double scaleFactor = (double) schaal.getValue() / 100;
            dienst.setScaleFactor(scaleFactor);
            frame.redraw(200);
          }
        });
    redrawButton.addActionListener(
        new ActionListener() {
          // Houdt bij of er op de knop gedrukt is
          public void actionPerformed(ActionEvent evt) {
            if (evt.getSource() == redrawButton) {
              Dienstregeling dienstregeling = maakDienstregeling();
              traffic.setDienstregeling(dienstregeling);
              dienst.setDienstregeling(dienstregeling);
              frame.redraw(200);
            }
          }
        });

    left.addActionListener(
        new ActionListener() {
          // Houdt bij of er op de knop gedrukt is
          public void actionPerformed(ActionEvent evt) {
            if (evt.getSource() == left) {
              int val = schaal.getValue();
              schaal.setValue(val - 1);
              double scaleFactor = (double) schaal.getValue() / 100;
              dienst.setScaleFactor(scaleFactor);
              frame.redraw(200);
            }
          }
        });

    right.addActionListener(
        new ActionListener() {
          // Houdt bij of er op de knop gedrukt is
          public void actionPerformed(ActionEvent evt) {
            if (evt.getSource() == right) {
              int val = schaal.getValue();
              schaal.setValue(val + 1);
              double scaleFactor = (double) schaal.getValue() / 100;
              dienst.setScaleFactor(scaleFactor);
              frame.redraw(200);
            }
          }
        });

    Panel buttonPane = new Panel();
    buttonPane.setLayout(new FlowLayout());
    buttonPane.add(left);
    buttonPane.add(schaal);
    buttonPane.add(right);
    buttonPane.add(redrawButton);

    buttonPane.setPreferredSize(new Dimension(1024, 40));

    this.add(buttonPane, BorderLayout.SOUTH);

    JPanel topPanel = new JPanel();
    topPanel.add(traffic, BorderLayout.CENTER);
    traffic.setLocation(frame.getWidth() / 2, 0);

    this.add(topPanel, BorderLayout.NORTH);
    this.add(dienst, BorderLayout.CENTER);

    // Exit the program when the window is closed
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    // Close the window when escape is pressed
    this.addKeyListener(
        new KeyAdapter() {
          @Override
          public void keyPressed(KeyEvent e) {
            super.keyPressed(e);
            if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
              System.exit(0);
            }
          }
        });

    mouseX = 0;
    mouseY = 0;

    this.addMouseMotionListener(
        new MouseMotionAdapter() {

          @Override
          public void mouseMoved(MouseEvent e) {
            super.mouseMoved(e);
            mouseX = (e.getX());
            mouseY = (e.getY()) - 25; // offset the 25px top bar

            mouseposition.setText(String.format("Mouse: %d, %d", mouseX, mouseY));
          }
        });

    mouseposition = new JLabel("Mouse:");
    buttonPane.add(mouseposition);

    // Resize the window
    pack();

    setVisible(true);
    frame.redraw(200);
  }