2016-04-29 10 views
0

私は子供のためのゲームであるJavaプロジェクトに取り組んでいます。メインメソッドを持つメニュークラスもあり、JPanelを継承したボードクラスがあり、そこにゲームGUIがあります。プレーヤの移動方法を持つPlayerクラスがあります。 jframeを拡張したメニュークラスのメニュー全体を設計しました。メニューオブジェクトである1つのフレームにすべてのアクションとイベントがありますので、私のメインフレームでJPanelを変更するにはrepaint()とvalidate()メソッドをたくさん使います。それは私のデザインのボードオブジェクトであるゲームを開始するためのユーザー用のゲームパネルを追加したいときにうまく機能します。不必要に作成されたフレームがもう1つあります。私のメニューでは、最初のユーザーは、私のコードで "start game button"、 "Top Scores"、 "Credits"、 "Exit"ボタンを持っているstartingPanelというパネルを見ています。ユーザがゲームを開始すると、userNamepanelが来てユーザが自分の名前を入力すると、userNamePanelを削除してBoardにフレームを追加するゲームの開始ボタンを使用してゲームを開始します。しかし、問題が発生すると、javaはそのフレームでボードパネルを開きますが、同時に新しいメニューフレームインスタンスを作成し、画面には2つのフレームがあります。では、どうすればこの余分なフレームを取り除くことができますか?だからここに私のコードです。まずボードクラス複数のフレームを不必要に作成する

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Board extends JPanel implements ActionListener { 



    private Timer timer; 
    private Player player; 
    private final int DELAY = 10; 
    private Image image; 
    private JLabel label; 
    private JPanel panel; 
    private JButton button1, button2; 
    private int mapNumber; 
    private boolean talkProfessor = false; 
    private ImageIcon front = new ImageIcon("player_front.png"); 
    private ImageIcon left = new ImageIcon("player_left.png"); 
    private ImageIcon right = new ImageIcon("player_right.png"); 
    private ImageIcon back = new ImageIcon("player_back.png"); 
    private ImageIcon front2 = new ImageIcon("player_front2.png"); 
    private ImageIcon left2 = new ImageIcon("player_left2.png"); 
    private ImageIcon right2 = new ImageIcon("player_right2.png"); 
    private ImageIcon back2 = new ImageIcon("player_back2.png"); 
    private ImageIcon front3 = new ImageIcon("player_front3.png"); 
    private ImageIcon left3 = new ImageIcon("player_left3.png"); 
    private ImageIcon right3 = new ImageIcon("player_right3.png"); 
    private ImageIcon back3 = new ImageIcon("player_back3.png"); 




    public Board() { 

     initBoard(); 





    } 

    private void initBoard() { 

     setPreferredSize(new Dimension(900,900)); 
     image = Toolkit.getDefaultToolkit().createImage("map4.png"); 
     mapNumber = 4; 

     addKeyListener(new TAdapter()); 
     setFocusable(true); 

     player = new Player(); 

     timer = new Timer(DELAY, this); 
     timer.start();  

    } 

    public Image getImage(){ 
     return image; 
    } 


    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 

     g.drawImage(image,0,0,null); 

     doDrawing(g);  
    } 

    private void doDrawing(Graphics g) { 

     Graphics2D g2d = (Graphics2D) g; 
     g2d.drawImage(player.getImage(), player.getX(), player.getY(), this); 

    } 



    public void actionPerformed(ActionEvent e) { 

     player.move(); 


     if(((player.getY() == 350 && mapNumber == 1) && (player.getX() <= 500 && player.getX() >= 400))){ 
      JOptionPane.showMessageDialog(null,"" + 
       " ");  
      player.setdY(0); 
      player.setY(player.getY() + 50); 
     } 

     if((player.getX() == 350 && mapNumber == 1) && (player.getY() <= 500 && player.getY() >= 400)){ 
      JOptionPane.showMessageDialog(null,""); 
      player.setX(player.getX() + 50); 
      player.setdX(0); 
     } 

     if((player.getY() == 750 && mapNumber == 2) && (player.getX() <= 500 && player.getX() >= 400)){ 
      JOptionPane.showMessageDialog(null,"" + 
       ""); 
      player.setY(player.getY() - 50); 
      player.setdY(0); 
      talkProfessor = true; 
     } 

     if((player.getY() == 500 && mapNumber == 3) && (player.getX() <= 500 && player.getX() >= 400)){ 
      JOptionPane.showMessageDialog(null,"" + 
       " " + 
        ""); 

      player.setY(player.getY() - 50); 
      player.setdY(0); 
     } 

     if((player.getY() == 400 && mapNumber == 3) && (player.getX() <= 280 && player.getX() >= 270)){ 
      JOptionPane.showMessageDialog(null,""); 
      player.setY(player.getY() + 10); 
      player.setdX(0); 
      player.setdY(0);    
     } 


     if((player.getX() == 200 && mapNumber == 4) && (player.getY() <= 500 && player.getY() >= 400)){ 
      if(talkProfessor){ 
       JOptionPane.showMessageDialog(null,"" + 
       " "); 

      } 
      else 
      JOptionPane.showMessageDialog(null,"" + 
       " "); 
      player.setX(player.getX() + 50); 
      player.setdX(0); 
     } 

     if((player.getX() == 100 && mapNumber == 5) && (player.getY() <= 500 && player.getY() >= 400)){ 
      JOptionPane.showMessageDialog(null," " + 
       ""); 

      player.setX(player.getX() + 50); 
      player.setdX(0); 
     } 

     if((player.getY() == 400 && mapNumber == 101) && player.getX() <= 50){ 
      JOptionPane.showMessageDialog(null,""); 

      player.setX(player.getX() + 50); 
      player.setdY(0); 

     } 

     if((player.getX() >= 800 && mapNumber == 101) && player.getY() == 420){ 
      player.setX(player.getX() - 50); 
      player.setdX(0); 
      player.setdY(0); 

      JOptionPane.showMessageDialog(null," "); 

     } 

     if(player.getX() == 850 && mapNumber == 1){ 
      image = Toolkit.getDefaultToolkit().createImage("map2.png"); 
      player.setX(10); 
      mapNumber = 2; 
     } 

     if(player.getX() == 0 && mapNumber == 2){ 
      image = Toolkit.getDefaultToolkit().createImage("map.png"); 
      player.setX(840); 
      mapNumber = 1; 
     } 

     if((player.getX() == 240 && mapNumber == 2) && player.getdX() == 1){ 
      player.setImage(front2, left2, right2, back2); 
     } 

     if((player.getX() == 200 && mapNumber == 2) && player.getdX() == -1){ 
      player.setImage(front, left, right, back); 
     } 


     if(player.getY() == 0 && mapNumber == 3){ 
      image = Toolkit.getDefaultToolkit().createImage("map4.png"); 
      player.setY(840); 
      mapNumber = 4; 
     } 

     if(player.getY() == 850 && mapNumber == 4){ 
      image = Toolkit.getDefaultToolkit().createImage("map3.png"); 
      player.setY(10); 
      mapNumber = 3; 
     } 



     if(player.getY() == 0 && mapNumber == 1){ 
      image = Toolkit.getDefaultToolkit().createImage("map5.png"); 
      player.setY(840); 
      mapNumber = 5; 
     } 

     if(player.getY() == 850 && mapNumber == 1){ 
      image = Toolkit.getDefaultToolkit().createImage("map4.png"); 
      player.setY(10); 
      mapNumber = 4; 
     } 



     if((player.getY() == 400 && mapNumber == 3) && (player.getX() >= 100 && player.getX() <= 200)){ 
      image = Toolkit.getDefaultToolkit().createImage("house.png"); 
      player.setX(400); 
      player.setY(840); 
      mapNumber = 101; 
      player.setImage(front3, left3, right3, back3); 
     } 

     if(player.getY() == 850 && mapNumber == 101){ 
      image = Toolkit.getDefaultToolkit().createImage("map3.png"); 
      player.setX(150); 
      player.setY(410); 
      mapNumber = 3; 
      player.setImage(front, left, right, back); 
     } 

     repaint(); 


    } 


    private class TAdapter extends KeyAdapter { 

     @Override 
     public void keyReleased(KeyEvent e) { 
      player.keyReleased(e); 
     } 

     @Override 
     public void keyPressed(KeyEvent e) { 
      player.keyPressed(e); 
     } 
    } 
    } 

は、ここでの主な方法としても

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Menu extends JFrame { 


private JButton buttonToStartTheQuest, buttonToShowCredits, buttonToExit, buttonToShowTopScores, buttonToTurnMenu, buttonToExit1, buttonToExit2, buttonToTurnMenu2; 
private JPanel startingPanel, creditsPanel, topScoresPanel, userNamePanel; 
private JLabel creditsLabel, topScoresLabel; 
private JLabel inputLabel,outputLabel; 
private JTextField userName; 
private ImageIcon image; 
private JButton startTheGame; 
private Board board; 





public Menu() { 

    buttonToStartTheQuest = new JButton("Start A New Quest"); 
    buttonToShowTopScores = new JButton("View Top Scores"); 
    buttonToShowCredits = new JButton("Credits"); 
    buttonToExit = new JButton("Exit"); 
    buttonToTurnMenu=new JButton("Turn Back To Main Menu"); 
    buttonToExit1 = new JButton("Exit"); 
    buttonToExit2 = new JButton("Exit"); 
    buttonToTurnMenu2=new JButton("Turn Back To Main Menu"); 
    startTheGame=new JButton("Start The Game"); 




    startingPanel = new JPanel(); 
    startingPanel.setPreferredSize(new Dimension(900,900)); 
    startingPanel.setLayout(new GridLayout(4,1)); 



    creditsPanel=new JPanel(); 
    creditsPanel.setPreferredSize(new Dimension(900,900)); 
    creditsLabel=new JLabel("Credits\nThis Game is Created By:\nPokeMan"); 
    creditsPanel.add(creditsLabel); 

    image=new ImageIcon("bigKid.png"); 
    userName=new JTextField(20); 
    userName.addActionListener(new UserListener()); 

    inputLabel= new JLabel("Enter Your User Name To Start The Quest",image, SwingConstants.CENTER); 
    outputLabel=new JLabel(""); 

    userNamePanel=new JPanel(); 
    userNamePanel.setPreferredSize(new Dimension(900,900)); 
    userNamePanel.setBackground(Color.white); 

    userNamePanel.add(inputLabel); 
    userNamePanel.add(userName); 
    userNamePanel.add(outputLabel); 



    topScoresPanel=new JPanel(); 
    topScoresPanel.setPreferredSize(new Dimension(900,900)); 
    topScoresLabel=new JLabel("Top Score\n 1----\n2-----\n3------"); 
    topScoresPanel.add(topScoresLabel); 



    ButtonListener listener = new ButtonListener(); 
    buttonToStartTheQuest.addActionListener(listener); 
    buttonToShowTopScores.addActionListener(listener); 
    buttonToShowCredits.addActionListener(listener); 
    buttonToExit.addActionListener(listener); 

    ButtonListener1 listener1= new ButtonListener1(); 
    buttonToExit1.addActionListener(listener1); 
    buttonToTurnMenu.addActionListener(listener1); 

    ButtonListener2 listener2 = new ButtonListener2(); 
    buttonToExit2.addActionListener(listener2); 
    buttonToTurnMenu2.addActionListener(listener2); 



    startingPanel.add(buttonToStartTheQuest); 
    startingPanel.add(buttonToShowTopScores); 
    startingPanel.add(buttonToShowCredits); 
    startingPanel.add(buttonToExit); 

    setTitle("Quest for Philosophy"); 
    setSize(900, 900); 
    setResizable(true); 
    setLocationRelativeTo(null); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    getContentPane().add(startingPanel); 
    pack(); 
    setVisible(true); 


    startTheGame.addActionListener(new GameStarter()); 




} 


private class ButtonListener implements ActionListener{ 
    public void actionPerformed(ActionEvent e){ 

     Object source = e.getSource(); 


     if(source == buttonToExit){ 
      System.exit(0); 

     } 

     if(source == buttonToShowCredits){ 

      remove(startingPanel); 
      creditsPanel.add(buttonToExit1); 
      creditsPanel.add(buttonToTurnMenu); 
      add(creditsPanel); 
      repaint(); 
      validate(); 
     } 

     if(source == buttonToShowTopScores){ 
      remove(startingPanel); 
      topScoresPanel.add(buttonToExit2); 
      topScoresPanel.add(buttonToTurnMenu2); 
      add(topScoresPanel); 
      repaint(); 
      validate(); 

     } 
     if(source==buttonToStartTheQuest){ 
      remove(startingPanel); 
      add(userNamePanel); 
      repaint(); 
      validate(); 
     } 
    }  
} 
private class ButtonListener1 implements ActionListener{ 
    public void actionPerformed(ActionEvent e1){ 
     Object source1= e1.getSource(); 
     if(source1==buttonToExit1) 
      System.exit(0); 
     else if(source1==buttonToTurnMenu){ 
      System.out.println("a"); 
      remove(creditsPanel); 
      add(startingPanel); 
      repaint(); 
      validate(); 
     } 
    } 
} 

private class ButtonListener2 implements ActionListener{ 
    public void actionPerformed(ActionEvent e2){ 
     Object source2=e2.getSource(); 
     if(source2==buttonToExit2) 
      System.exit(0); 
     else if(source2==buttonToTurnMenu2){ 
      remove(topScoresPanel); 
      add(startingPanel); 
      repaint(); 
      validate(); 
      }   
    } 
} 
private class UserListener implements ActionListener{ 
    public void actionPerformed(ActionEvent event){ 
     String text=userName.getText(); 
     outputLabel.setText("Game Is Started with User Name: " + text); 
     userNamePanel.add(startTheGame); 
     repaint(); 
     validate(); 


    } 
} 
private class GameStarter implements ActionListener{ 
    public void actionPerformed(ActionEvent event){ 
     Object source=event.getSource(); 

     if(source==startTheGame){ //here is where problem occurs 
      System.out.println("a"); 
      board= new Board(); 
      remove(userNamePanel); 
      add(board); 
      repaint(); 
      validate(); 


     } 
    } 
} 




public static void main(String[] args) { 

    EventQueue.invokeLater(new Runnable() { 
     public void run() { 

      Menu ex = new Menu(); 
     } 
    }); 
} 
} 

事前に感謝しているメニューのクラスがあります。

答えて

1

JOptionPaneを使用できます。

例:

JOptionPane.showOptionDialog(_parentComponent_, 
      _message_, // Message String 
      _title_, // Title of the Dialog 
      _optionType_, // 0, as you give the options 
      _messageType_, // type - information, question etc 
      _icon_, // whatever icon you want 
      _options_, // the options as an array of Objects 
      _initialValue_);// The selected value - index 

これはoの要素からテキストをウィット、ボタンでダイアログを作成します。選択したItemのインデックスを返します。 あなたのために:

Object o = {"Start", "Top Scores"....}; 
int selectedIndex = JOptionPane.showOptionDialog(null, "Choose an option", "Game", 0, -1, null,o, 0); 
関連する問題