/**
   * Constructor creates graphic components and adds them to the JPanel this class inherits from.
   */
  public SlidePuzzleGUI(String solver) {
    // default settings for internal attributes: unsolved 15 puzzle
    nPuzzle = 15;
    solved = false;
    this.solver = solver;
    // create graphics
    // create menu bar with pull down menu for puzzle configuration
    // this needs a menu and a menu item in it
    menuBar = new JMenuBar();
    menuBar.setBorder(new BevelBorder(BevelBorder.RAISED));
    // create a menu and add it to the menu bar.
    JMenu menu = new JMenu("Menu");
    menu.setMnemonic(KeyEvent.VK_M);
    // create menu item
    JMenuItem eMenuItem = new JMenuItem("Configuration");
    eMenuItem.setMnemonic(KeyEvent.VK_C);
    eMenuItem.setToolTipText("Set Puzzle Configuration");
    eMenuItem.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent event) {
            createFrame(); // create configuration frame
          }
        });
    menu.add(eMenuItem);
    menuBar.add(menu);

    // create button to solve puzzle in a step by step manner
    // The listener is too lengthy for an anonymous class,
    // code for the listener resides in internal NewGameAction class.
    JButton newGameButton = new JButton("Solve");
    ActionListener gameAction = new NewGameAction();
    newGameButton.addActionListener(gameAction);

    // create control panel that holds the solve button
    JPanel controlPanel = new JPanel();
    controlPanel.setLayout(new FlowLayout());
    controlPanel.add(newGameButton);

    // create graphics panel
    initalPuzzleGraphics = new GraphicsPanel(nPuzzle, PanelType.INITIALPANEL);
    intermediatePuzzleGraphics = new GraphicsPanel(nPuzzle, PanelType.INTERMEDIATEPANEL);
    finalPuzzleGraphics = new GraphicsPanel(nPuzzle, PanelType.GOALPANEL);
    // create and configure a solver
    constructPuzzleSolver();
    // the panel uses a borderlayout
    // the menubar goes on top
    setLayout(new BorderLayout());
    add(menuBar, BorderLayout.NORTH);
    add(controlPanel, BorderLayout.SOUTH);
    add(initalPuzzleGraphics, BorderLayout.WEST);
    add(intermediatePuzzleGraphics, BorderLayout.CENTER);
    add(finalPuzzleGraphics, BorderLayout.EAST);
  }
    /** Create the UI for this editor */
    void makeUI() {

      JPanel mainPanel = new JPanel(new BorderLayout());
      mainPanel.setBorder(new LineBorder(Color.blue));
      getContentPane().add(mainPanel, BorderLayout.CENTER);

      // the map and associated toolbar
      npEditControl = new NPController();
      mapEditPanel = npEditControl.getNavigatedPanel(); // here's where the map will be drawn
      mapEditPanel.setPreferredSize(new Dimension(250, 250));
      mapEditPanel.setSelectRegionMode(true);
      JToolBar navToolbar = mapEditPanel.getNavToolBar();
      navToolbar.setFloatable(false);
      JToolBar moveToolbar = mapEditPanel.getMoveToolBar();
      moveToolbar.setFloatable(false);
      // toolbar.remove("setReference");

      JPanel toolbar = new JPanel();
      List localMaps = maps;
      if (localMaps == null) {
        localMaps = getDefaultMaps();
      }
      JMenu mapMenu = new JMenu("Maps");
      JMenuBar menuHolder = new JMenuBar();
      menuHolder.setBorder(null);
      menuHolder.add(mapMenu);
      toolbar.add(menuHolder);
      for (int mapIdx = 0; mapIdx < localMaps.size(); mapIdx++) {
        final MapData mapData = (MapData) localMaps.get(mapIdx);
        final JCheckBoxMenuItem cbx =
            new JCheckBoxMenuItem(mapData.getDescription(), mapData.getVisible());
        if (mapData.getVisible()) {
          toggleMap(mapData, true);
        }
        mapMenu.add(cbx);
        cbx.addItemListener(
            new ItemListener() {
              public void itemStateChanged(ItemEvent event) {
                toggleMap(mapData, cbx.isSelected());
              }
            });
      }
      GuiUtils.limitMenuSize(mapMenu, "Maps ", 20);

      toolbar.add(navToolbar);
      toolbar.add(moveToolbar);

      JPanel mapSide = new JPanel();
      mapSide.setLayout(new BorderLayout());
      TitledBorder mapBorder =
          new TitledBorder(
              standardBorder, "Edit Projection", TitledBorder.ABOVE_TOP, TitledBorder.CENTER);
      mapSide.setBorder(mapBorder);
      mapSide.add(toolbar, BorderLayout.NORTH);
      mapSide.add(mapEditPanel, BorderLayout.CENTER);
      mainPanel.add(mapSide, BorderLayout.WEST);

      // the projection parameters

      // the Projection name
      JLabel nameLabel = GuiUtils.rLabel("Name: ");
      nameTF = new JTextField(20);

      // the list of Projection classes is kept in a comboBox
      typeLabel = GuiUtils.rLabel("Type: ");
      projClassCB = new JComboBox();
      // standard list of projection classes
      List classNames = getDefaultProjections();
      for (int i = 0; i < classNames.size(); i++) {
        String className = (String) classNames.get(i);
        try {
          projClassCB.addItem(new ProjectionClass(className));
        } catch (ClassNotFoundException ee) {
          System.err.println("ProjectionManager failed on " + className + " " + ee);
        } catch (IntrospectionException ee) {
          System.err.println("ProjectionManager failed on " + className + " " + ee);
        }
      }
      GuiUtils.tmpInsets = new Insets(4, 4, 4, 4);
      JPanel topPanel =
          GuiUtils.doLayout(
              new Component[] {nameLabel, nameTF, typeLabel, projClassCB},
              2,
              GuiUtils.WT_N,
              GuiUtils.WT_N);

      // the Projection parameter area
      paramPanel = new JPanel();
      paramPanel.setLayout(new BorderLayout());
      paramPanel.setBorder(
          new TitledBorder(
              standardBorder,
              "Projection Parameters",
              TitledBorder.ABOVE_TOP,
              TitledBorder.CENTER));

      // the bottom button panel
      JPanel buttPanel = new JPanel();
      JButton acceptButton = new JButton("Save");
      JButton previewButton = new JButton("Preview");
      JButton cancelButton = new JButton("Cancel");
      buttPanel.add(acceptButton, null);
      buttPanel.add(previewButton, null);
      buttPanel.add(cancelButton, null);

      JPanel mainBox = GuiUtils.topCenterBottom(topPanel, paramPanel, buttPanel);
      mainPanel.add(mainBox, BorderLayout.CENTER);
      pack();

      // enable event listeners when we're done constructing the UI
      projClassCB.addActionListener(
          new ActionListener() {
            public void actionPerformed(ActionEvent e) {
              ProjectionClass selectClass = (ProjectionClass) projClassCB.getSelectedItem();
              setProjection(selectClass.makeDefaultProjection());
            }
          });

      acceptButton.addActionListener(
          new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
              accept();
            }
          });
      previewButton.addActionListener(
          new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
              ProjectionClass projClass = findProjectionClass(editProjection);
              if (null != projClass) {
                setProjFromDialog(projClass, editProjection);
                setProjection(editProjection);
              }
            }
          });
      cancelButton.addActionListener(
          new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
              NewProjectionDialog.this.setVisible(false);
            }
          });
    }
示例#3
0
  public PuzzelHA() {

    window = new JFrame("PuzzelHA");
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // window.setSize(800, 600);

    // -----------------Menü erstellen---------------------------------------
    JMenuBar menu = new JMenuBar();
    menu.setBorder(new LineBorder(Color.BLACK, 1));

    JMenu spiel = new JMenu("Spiel");
    JMenuItem reset = new JMenuItem("Reset");
    reset.addActionListener(this);
    reset.setActionCommand("reset");
    spiel.add(reset);

    JMenu ansicht = new JMenu("Ansicht");
    JMenu bild = new JMenu("BildNr.");
    ansicht.add(bild);
    ButtonGroup bg1 = new ButtonGroup();

    for (int j = 1; j <= bilder.size(); j++) {
      JRadioButtonMenuItem bn = new JRadioButtonMenuItem("" + j);
      bn.setName("" + j);
      bn.setActionCommand("b");
      bn.addActionListener(this);
      bg1.add(bn);
      bild.add(bn);
    }

    // --------------RadioButtons für Puzzelgröße----------------------------------
    JMenu pg = new JMenu("Puzzelgröße");
    ansicht.add(pg);
    ButtonGroup bg2 = new ButtonGroup();
    JRadioButtonMenuItem pgb1 = new JRadioButtonMenuItem("2x3");
    pgb1.setActionCommand("g1");
    pgb1.addActionListener(this);
    bg2.add(pgb1);
    pg.add(pgb1);

    for (int i = 2; i <= 4; i++) {
      JRadioButtonMenuItem pgb = new JRadioButtonMenuItem("" + (i * 2) + "x" + (i * 2 - 1));
      pgb.setActionCommand("g" + i);
      pgb.addActionListener(this);
      bg2.add(pgb);
      pg.add(pgb);
    }

    JMenu help = new JMenu("?");
    JMenuItem info = new JMenuItem("Info");
    info.addActionListener(this);
    info.setActionCommand("?");
    help.add(info);

    menu.add(spiel);
    menu.add(ansicht);
    menu.add(help);
    window.add(menu);
    window.setJMenuBar(menu);

    // ---------------- Menü END-------------------------------------

    baueButton();

    window.setResizable(false);
    window.setLocationRelativeTo(null);
    window.pack();
    window.setVisible(true);
  }