user7420543
user7420543

Reputation:

Adding Menu before beginning of game

For some reason my jFrame no longer pops up after I add the menu. Is there something I am missing? I'm trying to make a menu that pops up before the beginning of the game and has buttons "play" as well as a text box that allows the user to input a username.

Any suggestions for how I could fix my code? Thank you!

this is my Menu class:

    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.GridLayout;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;

    import javax.swing.JButton;
    import javax.swing.JPanel;

    public class Menu extends JPanel{

        private static final long serialVersionUID = 1L;

        public Menu() {

            JPanel buttonPanel = new JPanel(new GridLayout());

            JButton play = new JButton();   
            JButton help = new JButton();
            buttonPanel.add(play);
            buttonPanel.add(help);

            setFocusable(true);

            addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    Game.started = true;
                }
            });
        }

        public void paint (Graphics g) {    
            super.paint(g);
            g.setColor(Color.black);
            g.fillRect(400, 400, Game.WIDTH, Game.HEIGHT);  
        }

    }

and this is my Main class from which I run my program:

import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Main implements Runnable{
    public void run() {
    final JFrame frame = new JFrame();

    frame.setTitle("Flying Square");
    frame.setSize(Game.WIDTH, Game.HEIGHT);

//The menu
    final Menu menu = new Menu();
    final Game game = new Game();
    frame.add(menu, BorderLayout.CENTER);
    menu.setVisible(true);

    try {while (Game.started == false) {
        Thread.sleep(10);
    }} catch (InterruptedException e){
        e.printStackTrace();
    }

    frame.remove(menu);

 //Main playing area
    frame.add(game, BorderLayout.CENTER);
    game.setVisible(true);
    frame.revalidate();

 // Put the frame on the screen
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

 // add listeners
    frame.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            flyingObject.jump();
        }
    });

    frame.addKeyListener(new KeyListener() {
        @Override
        public void keyPressed(KeyEvent e) {

        }

        @Override
        public void keyTyped(KeyEvent e) {


        }

        @Override
        public void keyReleased(KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_SPACE)
            {
                flyingObject.jump();
            }

        }
    });

 // Start game
    Game.reset();
}

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Main());
    }
}

Upvotes: 0

Views: 82

Answers (1)

MadProgrammer
MadProgrammer

Reputation: 347194

So, this...

try {while (Game.started == false) {
    Thread.sleep(10);
}} catch (InterruptedException e){
    e.printStackTrace();
}

Is blocking the Event Dispatching Thread, preventing it from processing any events and basically causing your program to hang.

This is not how you want to process responses from the user. Your Menu should be monitoring for input from the user, probably through one or more ActionListeners, when an action is triggered, it should be notifying some kind of controller, the controller can then make decisions about what it needs to do, like switch the panels for example

You're going to want to break your code down into at least three chunks, the "game" the "menu" and the "controller", this way it will be easier to manage, rather than trying to retrofit the functionality into an existing code

It would recommend having a look at

Upvotes: 1

Related Questions