Erste Schritte Wie mache ich weiter? (Spiel-Menü)

Kayuke

Mitglied
Guten Tag ich versuche gerade ein Menü für ein Spiel zu programmieren. Das Menü ist fertig, die Buttons funktionieren auch nun habe ich aber Schwierigkeiten bzw. weiß nicht genau wie man es anstellt, dass wenn ich auf einen Button wie Spiel starten klicke, das der aktuelle Inhalt des Fensters (also das Menü) verschwindet und ich dann halt weiter mache und dort das Spiel auftaucht. Kann mir da jemand weiterhelfen?

Hier der Code meines Menüs:
Java:
package GruppeD.SEPCopter;
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.ImageIcon;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class Menu extends javax.swing.JDialog implements ActionListener {
	private static JButton buttonSingleplayer;
	private static JButton buttonMultiplayer;
	private static JButton buttonHighscore;
	private static JButton buttonExit;


	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JFrame frame = new JFrame();
				Menu inst = new Menu(frame);
			}
		});
	}
	
	public Menu(JFrame frame) {
		super(frame);
		initGUI();
	}
	
	
	private void buttons(){
		
		// Button Singleplayer
		buttonSingleplayer = new JButton();
		getContentPane().add(buttonSingleplayer, "East");
		buttonSingleplayer.setText("Singleplayer");
		buttonSingleplayer.setBorderPainted(false);
		buttonSingleplayer.setContentAreaFilled(false);
		buttonSingleplayer.setBounds(70, 250, 350, 70);
		ImageIcon singleplayer = new ImageIcon("/menu_button_singleplayer.png");
		buttonSingleplayer.setIcon(singleplayer);
		buttonSingleplayer.addActionListener(new Action());
		buttonSingleplayer.addMouseListener(new java.awt.event.MouseAdapter()
		{
			public void mouseEntered(java.awt.event.MouseEvent evt) {
				ImageIcon singleplayer_hover = new ImageIcon("/menu_button_singleplayer_hover.png");
				buttonSingleplayer.setIcon(singleplayer_hover);
			}
			public void mouseExited(java.awt.event.MouseEvent evt) {
				ImageIcon singleplayer = new ImageIcon("/menu_button_singleplayer.png");
				buttonSingleplayer.setIcon(singleplayer);
			} 
		});
		
		// Button Multiplayer
		buttonMultiplayer = new JButton();
		getContentPane().add(buttonMultiplayer, "East");
		buttonMultiplayer.setText("Multiplayer");
		buttonMultiplayer.setBorderPainted(false);
		buttonMultiplayer.setContentAreaFilled(false);
		buttonMultiplayer.setBounds(70, 320, 350, 70);
		ImageIcon multiplayer = new ImageIcon("/menu_button_multiplayer.png");
		buttonMultiplayer.setIcon(multiplayer);
		buttonMultiplayer.addActionListener(new Action());
		buttonMultiplayer.addMouseListener(new java.awt.event.MouseAdapter()
		{
			public void mouseEntered(java.awt.event.MouseEvent evt) {
				ImageIcon multiplayer_hover = new ImageIcon("E:/workspace/GruppeD_SEPCopter/src/GruppeD/src/Bilder/Menu/menu_button_multiplayer_hover.png");
				buttonMultiplayer.setIcon(multiplayer_hover);
			}
			public void mouseExited(java.awt.event.MouseEvent evt) {
				ImageIcon multiplayer = new ImageIcon("/menu_button_multiplayer.png");
				buttonMultiplayer.setIcon(multiplayer);
			} 
		});
		
		// Button Highscore
		buttonHighscore = new JButton();
		getContentPane().add(buttonHighscore, "East");
		buttonHighscore.setText("Highscore");
		buttonHighscore.setBorderPainted(false);
		buttonHighscore.setContentAreaFilled(false);
		buttonHighscore.setBounds(70, 390, 350, 70);
		ImageIcon highscore = new ImageIcon("/menu_button_highscore.png");
		buttonHighscore.setIcon(highscore);
		buttonHighscore.addActionListener(new Action());
		buttonHighscore.addMouseListener(new java.awt.event.MouseAdapter()
		{
			public void mouseEntered(java.awt.event.MouseEvent evt) {
				ImageIcon highscore_hover = new ImageIcon("/menu_button_highscore_hover.png");
				buttonHighscore.setIcon(highscore_hover);
			}
			public void mouseExited(java.awt.event.MouseEvent evt) {
				ImageIcon highscore = new ImageIcon("/menu_button_highscore.png");
				buttonHighscore.setIcon(highscore);
			} 
		});
		
		// Button Exit
		buttonExit = new JButton();
		getContentPane().add(buttonExit, "East");
		buttonExit.setText("Exit");
		buttonExit.setBorderPainted(false);
		buttonExit.setContentAreaFilled(false);
		buttonExit.setBounds(70, 460, 350, 70);
		ImageIcon exit = new ImageIcon("/menu_button_exit.png");
		buttonExit.setIcon(exit);	
		buttonExit.addActionListener(new Action());
		buttonExit.addMouseListener(new java.awt.event.MouseAdapter()
		{
			public void mouseEntered(java.awt.event.MouseEvent evt) {
				ImageIcon exit_hover = new ImageIcon("/menu_button_exit_hover.png");
				buttonExit.setIcon(exit_hover);
			}
			public void mouseExited(java.awt.event.MouseEvent evt) {
				ImageIcon exit = new ImageIcon("/menu_button_exit.png");
				buttonExit.setIcon(exit);
			} 
		});

	}
	
	private void background(){
	       JPanel contentPane = new JPanel() {
	            @Override
	            protected void paintComponent(Graphics g) {
	            	ImageIcon a = new ImageIcon("/menu_hintergrund.png");
	                Image b = a.getImage();
	            	super.paintComponent(g);
	                g.drawImage(b, 0, 0, getWidth(), getHeight(), null);
	            }
	        };
	        contentPane.setLayout(null);
	        this.setContentPane(contentPane);
	}
	
	private void initGUI() {
		try {		
				// Gui Einstellungen
				getContentPane().setLayout(null);
				this.setMaximumSize(new java.awt.Dimension(1024, 700));
				this.setMinimumSize(new java.awt.Dimension(1024, 700));
				this.setResizable(false);
				this.setSize(1024, 700);
				this.setVisible(true);
				this.setTitle("SEPCopter by GruppeD - Version 0.1");
				
				
				// Gui Icon
				ImageIcon u = new ImageIcon("/icon.png");
				Image a = u.getImage();
				this.setIconImage(a);
				
				// hintergrund
				background();
				
				// Buttons
				buttons();
				
				
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	// Action Listener (Buttons)
	static class Action implements ActionListener{
		
		// Button Klicks
	    public void actionPerformed(ActionEvent e) {
	    	if (e.getSource() == buttonSingleplayer)
	    	{

	    	}
	    	else if (e.getSource() == buttonMultiplayer)
	    	{
	    		
	    	}
	    	else if (e.getSource() == buttonHighscore)
	    	{
	    		
	    	}
	    	else if (e.getSource() == buttonExit)
	    	{
	    		
	    	}
	    }
	}

	public void actionPerformed(ActionEvent e) {

		
	}
	
}
 
Also das mit den Cards wird mir doch etwas zu komplex gerade, ich habs mir so gedacht: Ich erstelle JPanel mainMenu, mache dann immer mainMenu.add(Button1) und damit halt alle Buttons und den Hintergrund und wenn man dann auf Spielstarten klickt wird mainMenu.setVisible(false) und alles verschwindet 😛

So klappts leider nicht, wo ist mein Denkfehler? Habe wohl JPanel falsch verstanden, dachte das sind Container die genau sowas können.
 
Zuletzt bearbeitet:
Hmm ich komm net weiter, hier mal mein jetziger Code, unten im KeyListener wird ein Integer menunr verändert, z.B. auf Singleplayer wirds die 1, dann muss aber iwie initgui wieder neu aufgerufen werden damit er es neu zeichnet aber ich kriegs nicht hin :/

Klasse: Menu
Java:
package GruppeD.SEPCopter;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.ImageIcon;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class Menu extends javax.swing.JDialog implements ActionListener {
	private static JButton buttonSingleplayer;
	private static JButton buttonMultiplayer;
	private static JButton buttonHighscore;
	private static JButton buttonExit;
	
	// Welches Menu?
	private static int menunr;
	

	
	public Menu(JFrame frame) {
		super(frame);
		initGUI();
	}
	
	
	
	
	public static void setMenuNr(int nr)
	{
		menunr = nr;
	}
	
	private void buttonsMainMenu(){
		
		// Button Singleplayer
		buttonSingleplayer = new JButton();
		getContentPane().add(buttonSingleplayer);
		buttonSingleplayer.setText("Singleplayer");
		buttonSingleplayer.setBorderPainted(false);
		buttonSingleplayer.setContentAreaFilled(false);
		buttonSingleplayer.setBounds(70, 250, 350, 70);
		ImageIcon singleplayer = new ImageIcon("E:/workspace/GruppeD_SEPCopter/src/GruppeD/src/Bilder/Menu/menu_button_singleplayer.png");
		buttonSingleplayer.setIcon(singleplayer);
		buttonSingleplayer.addActionListener(new Action());
		buttonSingleplayer.addMouseListener(new java.awt.event.MouseAdapter()
		{
			public void mouseEntered(java.awt.event.MouseEvent evt) {
				ImageIcon singleplayer_hover = new ImageIcon("E:/workspace/GruppeD_SEPCopter/src/GruppeD/src/Bilder/Menu/menu_button_singleplayer_hover.png");
				buttonSingleplayer.setIcon(singleplayer_hover);
			}
			public void mouseExited(java.awt.event.MouseEvent evt) {
				ImageIcon singleplayer = new ImageIcon("E:/workspace/GruppeD_SEPCopter/src/GruppeD/src/Bilder/Menu/menu_button_singleplayer.png");
				buttonSingleplayer.setIcon(singleplayer);
			} 
		});
		
		// Button Multiplayer
		buttonMultiplayer = new JButton();
		getContentPane().add(buttonMultiplayer);
		buttonMultiplayer.setText("Multiplayer");
		buttonMultiplayer.setBorderPainted(false);
		buttonMultiplayer.setContentAreaFilled(false);
		buttonMultiplayer.setBounds(70, 320, 350, 70);
		ImageIcon multiplayer = new ImageIcon("E:/workspace/GruppeD_SEPCopter/src/GruppeD/src/Bilder/Menu/menu_button_multiplayer.png");
		buttonMultiplayer.setIcon(multiplayer);
		buttonMultiplayer.addActionListener(new Action());
		buttonMultiplayer.addMouseListener(new java.awt.event.MouseAdapter()
		{
			public void mouseEntered(java.awt.event.MouseEvent evt) {
				ImageIcon multiplayer_hover = new ImageIcon("E:/workspace/GruppeD_SEPCopter/src/GruppeD/src/Bilder/Menu/menu_button_multiplayer_hover.png");
				buttonMultiplayer.setIcon(multiplayer_hover);
			}
			public void mouseExited(java.awt.event.MouseEvent evt) {
				ImageIcon multiplayer = new ImageIcon("E:/workspace/GruppeD_SEPCopter/src/GruppeD/src/Bilder/Menu/menu_button_multiplayer.png");
				buttonMultiplayer.setIcon(multiplayer);
			} 
		});
		
		// Button Highscore
		buttonHighscore = new JButton();
		mainMenu.add(buttonHighscore);
		getContentPane().add(buttonHighscore);
		buttonHighscore.setText("Highscore");
		buttonHighscore.setBorderPainted(false);
		buttonHighscore.setContentAreaFilled(false);
		buttonHighscore.setBounds(70, 390, 350, 70);
		ImageIcon highscore = new ImageIcon("E:/workspace/GruppeD_SEPCopter/src/GruppeD/src/Bilder/Menu/menu_button_highscore.png");
		buttonHighscore.setIcon(highscore);
		buttonHighscore.addActionListener(new Action());
		buttonHighscore.addMouseListener(new java.awt.event.MouseAdapter()
		{
			public void mouseEntered(java.awt.event.MouseEvent evt) {
				ImageIcon highscore_hover = new ImageIcon("E:/workspace/GruppeD_SEPCopter/src/GruppeD/src/Bilder/Menu/menu_button_highscore_hover.png");
				buttonHighscore.setIcon(highscore_hover);
			}
			public void mouseExited(java.awt.event.MouseEvent evt) {
				ImageIcon highscore = new ImageIcon("E:/workspace/GruppeD_SEPCopter/src/GruppeD/src/Bilder/Menu/menu_button_highscore.png");
				buttonHighscore.setIcon(highscore);
			} 
		});
	
		
		// Button Exit
		buttonExit = new JButton();
		getContentPane().add(buttonExit);
		buttonExit.setText("Exit");
		buttonExit.setBorderPainted(false);
		buttonExit.setContentAreaFilled(false);
		buttonExit.setBounds(70, 460, 350, 70);
		ImageIcon exit = new ImageIcon("E:/workspace/GruppeD_SEPCopter/src/GruppeD/src/Bilder/Menu/menu_button_exit.png");
		buttonExit.setIcon(exit);	
		buttonExit.addActionListener(new Action());
		buttonExit.addMouseListener(new java.awt.event.MouseAdapter()
		{
			public void mouseEntered(java.awt.event.MouseEvent evt) {
				ImageIcon exit_hover = new ImageIcon("E:/workspace/GruppeD_SEPCopter/src/GruppeD/src/Bilder/Menu/menu_button_exit_hover.png");
				buttonExit.setIcon(exit_hover);
			}
			public void mouseExited(java.awt.event.MouseEvent evt) {
				ImageIcon exit = new ImageIcon("E:/workspace/GruppeD_SEPCopter/src/GruppeD/src/Bilder/Menu/menu_button_exit.png");
				buttonExit.setIcon(exit);
			} 
		});

	}
	
	private void backgroundMainMenu(){
	       JPanel contentPane = new JPanel() {
	            @Override
	            protected void paintComponent(Graphics g) {
	            	ImageIcon a = new ImageIcon("E:/workspace/GruppeD_SEPCopter/src/GruppeD/src/Bilder/Menu/menu_hintergrund.png");
	                Image b = a.getImage();
	            	super.paintComponent(g);
	                g.drawImage(b, 0, 0, getWidth(), getHeight(), null);
	            }
	        };
	        contentPane.setLayout(null);
	        this.setContentPane(contentPane);
	}
	
	public void initGUI() {
		try {		
				// Gui Einstellungen
				getContentPane().setLayout(null);
				this.setMaximumSize(new java.awt.Dimension(1024, 700));
				this.setMinimumSize(new java.awt.Dimension(1024, 700));
				this.setResizable(false);
				this.setSize(1024, 700);
				this.setVisible(true);
				this.setTitle("SEPCopter by GruppeD - Version 0.1");
				
				// Gui Icon
				ImageIcon u = new ImageIcon("E:/workspace/GruppeD_SEPCopter/src/GruppeD/src/Bilder/Menu/icon.png");
				Image a = u.getImage();
				this.setIconImage(a);
				
				// Welches Gui laden?
				switch (menunr)
				{
					case 1:	
					// Singleplayer
					break;

					default:
					// Main Menu
					// hintergrund
					backgroundMainMenu();
					
					// Buttons
					buttonsMainMenu();
				}
				
				
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	// Action Listener (Buttons)
	static class Action implements ActionListener{
		
		// Button Klicks
	    public void actionPerformed(ActionEvent e) {
	    	
	    	if (e.getSource() == buttonSingleplayer)
	    	{
	    		setMenuNr(1);
	    	}
	    	else if (e.getSource() == buttonMultiplayer)
	    	{
	    		setMenuNr(2);
	    	}
	    	else if (e.getSource() == buttonHighscore)
	    	{
	    		setMenuNr(3);
	    	}
	    	else if (e.getSource() == buttonExit)
	    	{
	    		setMenuNr(4);
	    	}
	    }

	}

	public void actionPerformed(ActionEvent e) {

		
	}
	
}


Klasse: Main
Java:
package GruppeD.SEPCopter;

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


public class Main {
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JFrame frame = new JFrame();
				Menu inst = new Menu(frame);
			}
		});
	}

}
 
Zuletzt bearbeitet:
vl hab ich dich falsch verstanden.
Aber wenn du deine Action nicht static machst, kannst du in deiner ActionPerformed Methode initGui einfach aufrufen.

Java:
 // Action Listener (Buttons)
     class Action implements ActionListener{
        
        // Button Klicks
        public void actionPerformed(ActionEvent e) {
            
            if (e.getSource() == buttonSingleplayer)
            {
                setMenuNr(1);
            }
            else if (e.getSource() == buttonMultiplayer)
            {
                setMenuNr(2);
            } 

            .....
      
            initGUI();
        }
}
 
Das Problem ist jetzt es klappt immer noch nicht, ich denke es liegt daran das ich schreiben müsste wenn man auf Singleplayer geklickt hat, das alle Buttons .setVisible(false) sind und so, aber das wäre nicht gerade die schönste Lösung, so müsste ich ja nachher wenn ich 5 Menü Seiten habe, sobald ich eine Aufrufe alle anderen setVisible(false) machen :/

Und irgendwie geschieht nichts wenn ich initGUI erneut aufrufe, er zeichnet das Menü dann nicht neu :/
 
Zuletzt bearbeitet:
...das der aktuelle Inhalt des Fensters (also das Menü) verschwindet und ich dann halt weiter mache und dort das Spiel auftaucht.

Der Tipp mit dem CardLayout war doch garnicht so falsch... Dann hast du dein Menü auf einem JPanel, das Spiel auf einem anderen JPanel, fügst diese dem CardLayout hinzu und beim Klick auf "Spiel starten" wird das Panel gewechselt.
 
Hmm hatte es versucht aber nicht hinbekommen, werde nachher mich nochmal dran setzen und meinen ganzen Ansatz dazu posten falls es wieder nicht klappt, vlt. kannst du dir dann mal angucken was ich falsch gemacht habe.
 
Also mit dem CardLayout hab ichs nicht hinbekommen, Grund war wohl hauptsächlich das der Ausgangscode den ich hatte schwer weiter zu bauen war für weitere Ansichten. Als ich absolut nicht weiterkam, hatte ich mich persönlich an L-ectron-X gewandt, der wirklich sehr nett war und mir weitergeholfen hat.

Er hat es mir komplett umgeschrieben. (Bilder mit ImageIO geladen, CardLayout eingebaut, Event Handling verbessert, usw.)
Eher sogar einfach Vieles neu geschrieben und es mir sogar so kommentiert, dass ich es leicht erweitern kann und nun endlich das Spiel ordentlich dort einbauen werde, statt noch Tage am Menü zu sitzen 🙂

Danke nochmals an dieser Stelle. 🙂
 

Neue Themen


Zurück
Oben