Hallo!.
Ich habe ein Spiel mit einem Menü und dem eigentlichen Spiel.
Mein Problem ist das, wenn ich das Menü durch das Game-Play erstetze (CardLayout) mein KeyListener und wenn ich es anderrum versuche der ActionListener nicht mehr funktioniert.
Bitte dringend um Hilfe!
Vielen Dank schonmal!
Die Hauptklasse:
	
	
	
	
	
		
	
Die GamePlay Klasse
	
	
	
	
	
		
	
Die Menu (noch GameEnd ist aber am Ende das gleiche) Klasse
	
	
	
	
	
		
	
			
			Ich habe ein Spiel mit einem Menü und dem eigentlichen Spiel.
Mein Problem ist das, wenn ich das Menü durch das Game-Play erstetze (CardLayout) mein KeyListener und wenn ich es anderrum versuche der ActionListener nicht mehr funktioniert.
Bitte dringend um Hilfe!
Vielen Dank schonmal!
Die Hauptklasse:
		Java:
	
	package com.ludevstudio.brickbreaker;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.text.Position;
public class Main extends JFrame implements ActionListener{
 GamePlay playGround = new GamePlay(this);
 GameEnd gameEnd = new GameEnd(playGround, this);
 Menu menu = new Menu();
 
 JPanel masterContainer = new JPanel();
 
 CardLayout layout = new CardLayout();
 
 
 
 public static void main(String[] args) {
  new Main();
  
 }
 
 
 public Main() {
  setSize(800, 800);
  setDefaultCloseOperation(EXIT_ON_CLOSE);
  setResizable(false);
  setFocusable(true);
  setLocationRelativeTo(null);
  setLayout(null);
  
  initComponents();
  
  setVisible(true);
 
  }
 public void initComponents() {
  masterContainer.setBounds(0, 0, 800, 800);
  masterContainer.setVisible(true);
  masterContainer.setFocusable(true);
  masterContainer.setLayout(layout);
  this.add(masterContainer);
  
  gameEnd.setBounds(0, 0, 800, 800);
  gameEnd.setFocusable(true);
  masterContainer.add(gameEnd, "gameend");
  
  playGround.setBounds(0, 0, 800, 800);
  playGround.setFocusable(true);
  masterContainer.add(playGround, "playground");
  
  
  
 }
 
 
  @Override
  public void actionPerformed(ActionEvent e) {
   
   
  }
   public void showGameEnd() {
    layout.show(masterContainer, "gameend");
   }
   
   public void showGamePlay() {
    layout.show(masterContainer, "playground");
   }
}
	Die GamePlay Klasse
		Java:
	
	package com.ludevstudio.brickbreaker;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class GamePlay extends JPanel implements KeyListener, ActionListener  {
  Timer timer;
  int delay = 1;
  
  Boolean play = false;
  
  // Komponenten
  Player player;
  Border border;
  Ball ball;
  Levels levels;
  MapGenerator mapGen;
  
  Main mainFrame;
  
 public GamePlay(Main mainFrame) {
  this.mainFrame = mainFrame;
  
  setFocusable(true);
  addKeyListener(this);
  
  timer = new Timer(delay, this);
 timer.start();
  
  
  player = new Player();
  border = new Border();
  ball = new Ball(player);
  levels = new Levels();
  mapGen = new MapGenerator(levels.level1, levels.getLevel1Colors());
  
 }
 public void paint (Graphics g) {
  
  // Hintergrund
  g.setColor(Color.BLACK);
  g.fillRect(0, 0, this.getWidth(), this.getHeight());
  
  // Player
  player.draw((Graphics2D)g);
  
  // Border
  border.draw((Graphics2D)g);
  
  // Ball
  ball.draw((Graphics2D)g);
  
  // Map
  mapGen.draw((Graphics2D)g);
 
 }
 
 
 @Override
 
 public void actionPerformed(ActionEvent arg0) {
  timer.start();
  
 if(play) { 
  ball.move();
  ball.rebound();
  
  if(ball.getBall().y>800) {
   mainFrame.showGameEnd();
   
  }
  
 }
  
  repaint();
  
 }
 
 
 
 
 @Override
 public void keyPressed(KeyEvent e) {
  if(e.getKeyCode()==KeyEvent.VK_LEFT) {
   play = true;
   player.moveLeft();
   repaint();
  } else if(e.getKeyCode()==KeyEvent.VK_RIGHT) {
   play = true;
   player.moveRight();
   repaint();
  }
 
 }
 
 
 
 
 
 
 
 @Override
 public void keyReleased(KeyEvent e) {
  
 }
 @Override
 public void keyTyped(KeyEvent e) {
  
 }
 
}
	Die Menu (noch GameEnd ist aber am Ende das gleiche) Klasse
		Java:
	
	package com.ludevstudio.brickbreaker;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class GameEnd extends JPanel implements ActionListener{
 JButton btnPlay, btnExit;
 JLabel labelTitle, labelSubTitle, labelCopyRight;
 
 
 Main mainFrame;
 GamePlay gamePlay;
 
 public GameEnd(GamePlay gamePlay, Main mainFrame) {
  this.mainFrame = mainFrame;
  this.gamePlay = gamePlay;
  
  setLayout(null);
  setBackground(Color.BLACK);
  setVisible(true);
  initComponents();
 }
 
 public void initComponents() {
  Font titleFont = new Font ("segoe script", Font.BOLD, 100);
  Font SubTitlefont = new Font("segoe script", Font.BOLD, 20);
  Font font = new Font("segoe script", Font.BOLD, 50);
  
  
  
  labelTitle = new JLabel("BrickBreaker");
  labelTitle.setBounds(0, 60, 800, 130);
  labelTitle.setHorizontalAlignment(JLabel.CENTER);
  labelTitle.setFont(titleFont);
  labelTitle.setForeground(Color.RED);
  this.add(labelTitle);
  
  labelSubTitle = new JLabel("powered by LuDev Studio");
  labelSubTitle.setBounds(0, 150, 800, 50);
  labelSubTitle.setHorizontalAlignment(JLabel.CENTER);
  labelSubTitle.setFont(SubTitlefont);
  labelSubTitle.setForeground(Color.CYAN);
  this.add(labelSubTitle);
  
  
  btnPlay = new JButton("Play");
  btnPlay.setBounds(300, 350, 200, 80);
  btnPlay.setFont(font);
  btnPlay.addActionListener(this);
  this.add(btnPlay);
  
  btnExit = new JButton("Exit");
  btnExit.setBounds(300, 470, 200, 80);
  btnExit.setFont(font);
  btnExit.addActionListener(this);
  this.add(btnExit);
  
  labelCopyRight = new JLabel("@2017 LuDev Studio - All rights reserved.");
  labelCopyRight.setBounds(0, 730, 800, 30);
  labelCopyRight.setHorizontalAlignment(JLabel.CENTER);
  labelCopyRight.setFont(SubTitlefont);
  labelCopyRight.setForeground(Color.CYAN);
  this.add(labelCopyRight);
 }
 
 
 @Override
 public void actionPerformed(ActionEvent e) {
  if(e.getSource()==btnPlay) {
   mainFrame.showGamePlay();
  } else if(e.getSource()==btnExit) {
   System.exit(0);
  }
  
 }
}