How can I switch between jpanels?

后端 未结 3 928
独厮守ぢ
独厮守ぢ 2020-12-11 21:28

I\'m still very new to java programming, so please help me to correct any mistakes I might have overlooked or give tips on how to improve this program.

Okay, so a lo

3条回答
  •  一生所求
    2020-12-11 21:52

    This works with a mouse click on the menu. You can change it later, to a click on some button or whatever you want.

    I added a MouseListener to the Game class. When the user presses the mouse on the menu JPanel, it adds the Pipes JPanel to JFrame and calls the pack method.

    Game.java:

    import java.awt.Point;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.geom.Rectangle2D;
    
    import javax.swing.JFrame;
    import javax.swing.SwingUtilities;
    import javax.swing.Timer;
    
    public class Game {
    
        GameMenu menu = new GameMenu();
        Pipes game;
        boolean start = false;
        JFrame f;
        Rectangle2D menuRect = new Rectangle2D.Double(20, 20, 60, 40);
    
        public Game() {
            f = new JFrame();
    
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.add(menu);
            f.setTitle("Pipe Game");
            f.setResizable(false);
            f.pack();
            f.setLocationRelativeTo(null);
            f.setVisible(true);
    
    
    
            menu.addMouseListener(new MouseAdapter() {
    
                @Override
                public void mousePressed(MouseEvent e) {
    
                    Point click = new Point(e.getX(), e.getY());
                    System.out.println("Clicked on the Panel");
    
                    if(menuRect.contains(click))
                    {
                        System.out.println("Clicked inside the Rectangle.");
    
                        start = true; 
                        menu.setVisible(false);
                        game = new Pipes();
                        f.add(game);
                        f.pack();
    
                        Timer timer = new Timer(10, new ActionListener() {  //pipe speed
                            @Override
                            public void actionPerformed(ActionEvent e) {
                                game.move();
                            }
                        });
                        timer.start();
    
                        Timer refresh = new Timer(30, new ActionListener() {    //refresh rate
                            @Override
                            public void actionPerformed(ActionEvent e) {
                                game.repaint();
                            }
                        });
                        refresh.start();   
                    }
                }
    
                @Override
                public void mouseReleased(MouseEvent e) {
                }
            });
    
        }
    
        public static void main(String args[]) {
            SwingUtilities.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    new Game();
                }
            });
        }
    }
    

提交回复
热议问题