# 1. Menüleiste wird doppelt gezeichnet 2. awt auf ein jpanel



## MiniDirk (8. Jan 2007)

Hallo zusammen,

Ich bin dabei als kleine Projektarbeit für die Uni ein BAP-Spiel zu schreiben, dabei habe 2 Probleme die ich leider durch suchen hier im Forum auch nicht gelösst bekomme:

Mein erster Versuche des Spiels habe ich im AWT geschrieben, da gibt es 3 Klassen: Balken, Ball und Spiel. Spiel ist für den Spielablauf da und bei den anderen beiden wird der Ball und der Balken definiert. Ist sicherlich noch ausbaufähig aber es bewegt sich schon mal.

Jetzt möchte ich das ganze in SWING schreiben (BAP_Spiel) und habe da schon einige Menüs etc. gemacht. Das klappt auch soweit. Da dachte ich mir ich mache ein Jpanel wo ich das eigentliche Spiel drin läuft. (Spielfeld).

Jetzt habe ich ein Panel gemacht und wenn ich das Programm startet zeichnet er mir die Menüleiste doppelt. Warum?

Und wäre ich für ein Tipps wie meine erste Version auf das JPanel bekomme sehr dankbar.

Ich hoffe ich habe mich halbwegs verständlich ausgedrückt wo ich mein Problem habe.

Danke schon mal für die Hilfe



Hier ist die AWT Version die ich gerne als JPanel haben möchte:

```
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;

public class Spiel extends Canvas {
  public static final int breite = 800, hoehe = 600, pause = 1, schlaegerBreite = 50, schlaegerHoehe = 12,schlaegerOben=545;

  public int mausX,mausY,mausTaste, anzahlTreffer=0;
  
  public boolean balkenTreffer = false;

  public final int anzahlBalkenSpalten = 14,anzahlBalkenReihen = 2;
  
  public BufferStrategy strategy;
  
  Ball ball;
  Balken balkenReihe[][] = new Balken[anzahlBalkenReihen][anzahlBalkenSpalten];

  public Spiel() {

    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    Frame fenster = new Frame();

    fenster.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });

    fenster.add(this);

    addMouseMotionListener(new MouseMotionListener() {
      public void mouseDragged(MouseEvent e) {
        
      }

      public void mouseMoved(MouseEvent e) {
        mausX = e.getX();
        mausY = e.getY();

      }
    });

    fenster.setTitle("BAP - Spiel");
    fenster.setSize(breite+7, hoehe+33);
    fenster.setBackground(Color.black);
    fenster.setLocation((d.width - fenster.getWidth()) / 2,
        (d.height - fenster.getHeight()) / 2);
    fenster.setResizable(false);
    fenster.setVisible(true);
  
    ball = new Ball(180,180,10);
    ball.setSpeedX(1);
    ball.setSpeedY(1);
    
    for (int i = 1; i < anzahlBalkenReihen; i++) {
      for (int j = 1; j < anzahlBalkenSpalten; j++){
        balkenReihe[i][j] = new Balken((j-1) * 60 + 14,150 - (i * 20),Color.red);
      }
    }
    
    
    createBufferStrategy(2);
    strategy = getBufferStrategy();
  }

  public void zeichneSpielfeld() {
    Graphics g = strategy.getDrawGraphics();

    g.setColor(getBackground());
    g.fillRect(0, 0, getWidth(), getHeight());
    
    
    
    ball.paint(g);
    
    for (int i=1;i<anzahlBalkenReihen;i++){
      for (int j=1;j<anzahlBalkenSpalten;j++){
        if (balkenReihe[i][j].getGetroffen() == false){ 
          balkenReihe[i][j].paint(g);
        }
      }
    }
    
    g.setColor(Color.gray);
    g.fill3DRect(mausX - schlaegerBreite/2, schlaegerOben, schlaegerBreite, schlaegerHoehe, true);
    g.drawString("Treffer: " + anzahlTreffer,10,580);
    strategy.show();
  }

  public void updateFenster() {
    
    ball.bewegen(balkenTreffer);
    balkenTreffer = false;
    ball.testeObSchlaegerGetroffen(schlaegerOben,schlaegerOben+schlaegerHoehe,mausX - schlaegerBreite/2,mausX + schlaegerBreite/2);
    

    for (int i=1;i<anzahlBalkenReihen;i++){
      for (int j=1;j<anzahlBalkenSpalten;j++){
      if (balkenReihe[i][j].getGetroffen() == false){
        balkenReihe[i][j].pruefeTreffer(ball.getBallX(),ball.getBallY(),ball.getBallRadius());
        if (balkenTreffer == false){
          balkenTreffer = balkenReihe[i][j].getGetroffen();
          if (balkenTreffer == true){anzahlTreffer++;}
        }
      }
      }
    }
    
  }

  public void game() {
    while (isVisible()) {
      updateFenster();
      zeichneSpielfeld();

      try {
        Thread.sleep(pause);
      } catch (InterruptedException e) {

      }
    }
  }

  public static void main(String[] args) {

    Spiel bap = new Spiel();
    bap.game();
  }
}
```


Die Balken:

```
import java.awt.*;

public class Balken {

  // Variablen
  private int balkenX; // x - Position des Balken
  private int balkenY; // y - Position des Balken
  private static final int balkenBreite = 50; // Balkenbreite
  private static final int balkenHoehe = 12; // Balkenhoehe
  private Color c;
  private boolean getroffen = false;

  Balken(int balkenX, int balkenY, Color c) {

    this.balkenX = balkenX;
    this.balkenY = balkenY;
    this.c = c;

  }

  public void pruefeTreffer(int ballX, int ballY, int ballRadius) {
    
    int ballOben = ballY - ballRadius;
    int ballUnten = ballY + ballRadius;
    int ballLinks = ballX - ballRadius;
    int ballRechts = ballX + ballRadius;
    
    if (((ballOben <= balkenY + balkenHoehe) && (ballUnten >= balkenY) ) && ((ballLinks <= balkenX + balkenBreite) && (ballRechts >= balkenX))){
      getroffen = true;
    }
    

  }
  
  public boolean getGetroffen(){
    return getroffen;
  }

  public void paint(Graphics g) {

    if (getroffen == false) {
      g.setColor(c);
      g.fill3DRect(balkenX, balkenY, balkenBreite, balkenHoehe, true);
    }
    if (getroffen == true) {
      g.setColor(Color.black);
      g.fill3DRect(balkenX, balkenY, balkenBreite, balkenHoehe, true);
    }
  }
}
```

Und der Ball


```
import java.awt.*;

public class Ball {

  // Variablen
  private int ballX; // x - Position des Balles
  private int ballY; // y - Position des Balles
  private int ballRadius; // Ballradius
  private int speedX; // Geschwindigkeit in x - Richtung
  private int speedY; // Geschwindigkeit in y - Richtung
  private boolean balkenTreffer;

  // Positionen
  private int ballOben; // Obergrenze des Balles
  private int ballUnten; // Untergrenze des Balles
  private int ballLinks; // Linke Grenze des Balles
  private int ballRechts; // Rechte Grenze des Balles

  //?
  private int schlaegerOben; // Oberkante des Schlägers
  private int schlaegerUnten; // Unterkante des Schlägers
  private int schlaegerLinks; // Linke Grenze des Schlägers
  private int schlaegerRechts; // Rechte Grenze des Schlägers


  public Ball(int ballX, int ballY, int ballRadius) {
    this.ballX = ballX;
    this.ballY = ballY;
    this.ballRadius = ballRadius;
      }

  public void setSpeedX(int speedX) {
    this.speedX = speedX;
  }

  public void setSpeedY(int speedY) {
    this.speedY = speedY;
  }

  public void bewegen(boolean balkenTreffer) {
    this.balkenTreffer = balkenTreffer;
    ballX += speedX;
    ballY += speedY;
    istBallOut();   
  }

  public void istBallOut() {
    // Ball bewegt sich nach links
    if (speedX < 0) {
      if (ballX < ballRadius) {
        // Geschwindigkeit umdrehen
        speedX = -speedX;
      }
    }
    // Ball bewegt sich nach rechts
    else if (speedX > 0) {
      if (ballX > Spiel.breite-ballRadius) {

        // Geschwindigkeit umdrehen
        speedX = -speedX;
      }
    }

    // Ball bewegt sich nach oben
    if (speedY < 0) {
      if ((ballY < 0+ballRadius) || (balkenTreffer == true)) {
        speedY = -speedY;
      }
    }
    // Ball bewegt sich nach unten
    else if (speedY > 0) {
      if ((ballY > Spiel.hoehe-ballRadius) || (balkenTreffer == true)) {
        speedY = -speedY;
      }
    }
  }

  public void testeObSchlaegerGetroffen (int schlaegerOben, int schlaegerUnten,int schlaegerLinks, int schlaegerRechts) {
    
    // Initialisierung der momentanen Positionen des Schlägers
    
    this.schlaegerOben = schlaegerOben;
    this.schlaegerUnten = schlaegerUnten;
    this.schlaegerLinks = schlaegerLinks;
    this.schlaegerRechts = schlaegerRechts;

    // Initialisierung der Ballpositionen
  
    ballOben = ballY - ballRadius;
    ballUnten = ballY + ballRadius;
    ballLinks = ballX - ballRadius;
    ballRechts = ballX + ballRadius;

    if ((ballX >= schlaegerLinks) && (ballX <= schlaegerRechts) && (ballUnten >= schlaegerOben) && (ballUnten<=schlaegerUnten)){
      speedY = -speedY;
    
    }

  }

  public void paint(Graphics g) {
    g.setColor(Color.blue);
    g.fillOval(ballX - ballRadius, ballY - ballRadius, 2 * ballRadius,
        2 * ballRadius);
  }

  public int getspeedX() {
    return speedX;
  }

  public int getspeedY() {
    return speedY;
  }

  public int getBallX() {
    return ballX;
  }

  public int getBallY() {
    return ballY;
  }

  public int getBallRadius() {
    return ballRadius;
  }
}
```



Das ist die Swing Version mit den ganzen Menüs


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

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 11.11.2006
  * @author
  */

public class BAP_Spiel extends JFrame {
  // Anfang Variablen
  private JMenuBar jmb_menu = new JMenuBar();
  private JMenu jmu_Spiel = new JMenu("Spiel");
  private JMenuItem SpielJMenuItem1 = new JMenuItem("Neu");
  private JMenuItem SpielJMenuItem2 = new JMenuItem("Beenden");
  private JMenu jmu_Level = new JMenu("Level");
  private JRadioButtonMenuItem LevelJRadioButtonMenuItem1 = new JRadioButtonMenuItem("Level 1");
  private JRadioButtonMenuItem LevelJRadioButtonMenuItem2 = new JRadioButtonMenuItem("Level 2");
  private JRadioButtonMenuItem LevelJRadioButtonMenuItem3 = new JRadioButtonMenuItem("Level 3");
  private JRadioButtonMenuItem LevelJRadioButtonMenuItem4 = new JRadioButtonMenuItem("Level 4");
  private JRadioButtonMenuItem LevelJRadioButtonMenuItem5 = new JRadioButtonMenuItem("Level 5");
  private JMenu jmu_Highscore = new JMenu("Highscore");
  private JMenuItem HighscoreJMenuItem1 = new JMenuItem("Anzeigen");
  private JMenuItem HighscoreJMenuItem2 = new JMenuItem("löschen");
  private JMenu jmu_Hilfe = new JMenu("Hilfe");
  private JMenuItem HilfeJMenuItem1 = new JMenuItem("Hilfe");
  private JMenuItem HilfeJMenuItem2 = new JMenuItem("Info");
  private ButtonGroup LevelRadioButton = new ButtonGroup();
  public Spielfeld SpielFeldBAP = new Spielfeld();
  public static int mausX,mausY;
  // Ende Variablen

  public BAP_Spiel(String title) {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { System.exit(0); }
    });
    addMouseMotionListener(new MouseMotionListener() {
      public void mouseDragged(MouseEvent e) {

      }

      public void mouseMoved(MouseEvent e) {
        mausX = e.getX();
        mausY = e.getY();

      }
    });
    int frameWidth = 800;
    int frameHeight = 600;

    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2 ;
    setLocation(x, y);

    //SpielFeldBAP.setDoubleBuffered(true);
    Container cp = getContentPane();
    cp.add(SpielFeldBAP);


    // Anfang Komponenten

    setJMenuBar(jmb_menu);
    jmb_menu.add(jmu_Spiel);
        SpielJMenuItem1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        SpielJMenuItem1ActionPerformed(evt); } });
    jmu_Spiel.add(SpielJMenuItem1);
    jmu_Spiel.addSeparator();
    SpielJMenuItem2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        SpielJMenuItem2ActionPerformed(evt); } });
    jmu_Spiel.add(SpielJMenuItem2);
    //Hier wird definiert das die Levelauswahl gruppiert wird sprich immer nur eine Auswahl möglich
    LevelRadioButton.add(LevelJRadioButtonMenuItem1);
    LevelRadioButton.add(LevelJRadioButtonMenuItem2);
    LevelRadioButton.add(LevelJRadioButtonMenuItem3);
    LevelRadioButton.add(LevelJRadioButtonMenuItem4);
    LevelRadioButton.add(LevelJRadioButtonMenuItem5);
    // ENde der definition
    jmb_menu.add(jmu_Level);
    LevelJRadioButtonMenuItem1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        LevelJRadioButtonMenuItem1ActionPerformed(evt); } });
    jmu_Level.add(LevelJRadioButtonMenuItem1);

    LevelJRadioButtonMenuItem2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        LevelJRadioButtonMenuItem2ActionPerformed(evt); } });
    jmu_Level.add(LevelJRadioButtonMenuItem2);

    LevelJRadioButtonMenuItem3.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        LevelJRadioButtonMenuItem3ActionPerformed(evt); } });
    jmu_Level.add(LevelJRadioButtonMenuItem3);

    LevelJRadioButtonMenuItem4.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        LevelJRadioButtonMenuItem4ActionPerformed(evt); } });
    jmu_Level.add(LevelJRadioButtonMenuItem4);

    LevelJRadioButtonMenuItem5.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        LevelJRadioButtonMenuItem5ActionPerformed(evt); } });
    jmu_Level.add(LevelJRadioButtonMenuItem5);

    jmb_menu.add(jmu_Highscore);
    HighscoreJMenuItem1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HighscoreJMenuItem1ActionPerformed(evt); } });
    jmu_Highscore.add(HighscoreJMenuItem1);
   jmu_Highscore.addSeparator();
    HighscoreJMenuItem2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HighscoreJMenuItem2ActionPerformed(evt); } });
    jmu_Highscore.add(HighscoreJMenuItem2);
    
    jmb_menu.add(jmu_Hilfe);
        HilfeJMenuItem1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HilfeJMenuItem1ActionPerformed(evt); } });
    jmu_Hilfe.add(HilfeJMenuItem1);
    jmu_Hilfe.addSeparator();
    HilfeJMenuItem2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HilfeJMenuItem2ActionPerformed(evt); } });
    jmu_Hilfe.add(HilfeJMenuItem2);

    // Ende Komponenten



    setResizable(false);
    //setVisible(true);
  }

  // Anfang Ereignisprozeduren
  public void SpielJMenuItem1ActionPerformed(ActionEvent evt) {

  }
  public void SpielJMenuItem2ActionPerformed(ActionEvent evt) {
    DialogBeenden DialogEnde = new DialogBeenden(this,"Ende?",true);
  }
  public void LevelJRadioButtonMenuItem1ActionPerformed(ActionEvent evt) {

  }
  public void LevelJRadioButtonMenuItem2ActionPerformed(ActionEvent evt) {

  }
  public void LevelJRadioButtonMenuItem3ActionPerformed(ActionEvent evt) {

  }
  public void LevelJRadioButtonMenuItem4ActionPerformed(ActionEvent evt) {

  }
  public void LevelJRadioButtonMenuItem5ActionPerformed(ActionEvent evt) {
    DialogName DialogNameEingeben = new DialogName(this,"Herzlichen Glückwunsch!",true);
  }
  public void HighscoreJMenuItem1ActionPerformed(ActionEvent evt) {
     DialogHighscore DialogHiscoreAnzeigen = new DialogHighscore(this,"Die TOP 10",true);
  }
  public void HighscoreJMenuItem2ActionPerformed(ActionEvent evt) {
    DialogHighscoreLoeschen DialogHL = new DialogHighscoreLoeschen(this,"Löschen?",true);
  }
  public void HilfeJMenuItem1ActionPerformed(ActionEvent evt) {
    DialogHilfe DialogHilfeAnzeigen = new DialogHilfe(this,"Anleitung",true);
  }
  public void HilfeJMenuItem2ActionPerformed(ActionEvent evt) {
    DialogInfo DialogInfoAnzeigen = new DialogInfo(this,"Info",true);
  }
  // Ende Ereignisprozeduren
  
  public void spielAblauf(){
    while (isVisible()){

    SpielFeldBAP.repaint();
    }
  }
  public static void main(String[] args) {
    BAP_Spiel spiel = new BAP_Spiel("BAP Spiel von Bejer / DeLiello / Krieger / Küls");
    spiel.spielAblauf();


  }
}
```


Das Spielfeld hier soll das Spiel drin laufen:


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


class Spielfeld extends JPanel {

    @Override
    protected void paintComponent(Graphics g){
    super.paintComponents(g);
    g.fill3DRect(BAP_Spiel.mausX,BAP_Spiel.mausY,20,20,true);
    g.setColor(Color.red);
    g.drawLine( 10, 10, 100, 50 );
```


----------



## MarcoBehnke (8. Jan 2007)

was meinst Du mit doppelt? Übereinander? Kannst Du einen Screenshot erstellen. Der Code sieht soweit in Ordnung aus.

Canvas erbt von Component und ist somit eine. D.h. du kannst Dein Spiel direkt in das JPanel adden.

in BAP_Spiel also per

Spiel myspiel = new Spiel();
getContentPane().setLayout(new BorderLayout());
getContentPane().add(myspiel);


----------



## L-ectron-X (8. Jan 2007)

Canvas ist eine AWT-Komponente!
AWT und Swing sollten nicht gemischt werden, dann kann es zu solchen Effekten kommen.
Statt auf Canvas kannst du auf einem JPanel zeichnen. Dazu überschreibst du die paintComponent()-Methode.


----------



## MiniDirk (8. Jan 2007)

Ja genau die leiste wird unter der richtigen leiste noch einmal gezeichnet. Habe leider keinen Webspace um das Bild einzubinden. 

Und das mit dem mischen war mir bekannt, deswegen habe ich auch in dem Spielfeld wo ich ja die anderen Sachen so langsam einbinden möchte die paintComponent Metheode überschrieben.

Wie funktioniert das den mit der Doppelbufferung? Ist gibt da ja die möglichkeit mit setDoubleBuffered(true) das Panel zu buffern.

Doch irgendwie scheint das nicht zu funktionieren.


----------



## MiniDirk (11. Jan 2007)

Hallo zusammen,

ich bin jetzt einen Schritt weiter gekommen und zwar habe ich das Spielfeld jetzt von JPanel abgeleitet sonder von JComponent und komischerweise funktioniert es jetzt so wie ich mir das denke. Kann mir das einer vielleicht erklären?
Es gibt keine doppelte Menuleiste mehr

Ein kleineres Problem habe ich dennoch und zwar nicht das Spielfeld keine Hintergrundfarbe an mit setBackground, es gibt aber auch keine Fehlermeldung. Hat da jemand eine Lösung für mich.

Mir ist da noch etwas aufgefallen und zwar habe ich in dem BAP_Spiel eine Variable Pause eingefügt, die wenn jemand im Menü etwas macht das Spiel anhält. Mache ich das nicht dauert es weig bis sich ein Dialog oder das Menü wieder aufbaut.

Hier noch mal der Quellcode der beiden Hauptklassen:


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.String;
import java.lang.System;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 11.11.2006
  * @author
  */

public class BAP_Spiel extends JFrame {
  // Anfang Variablen
  private JMenuBar jmb_menu = new JMenuBar();
  private JMenu jmu_Spiel = new JMenu("Spiel");
  private JMenuItem SpielJMenuItem1 = new JMenuItem("Neu");
  private JMenuItem SpielJMenuItem2 = new JMenuItem("Beenden");
  private JMenu jmu_Level = new JMenu("Level");
  private JRadioButtonMenuItem LevelJRadioButtonMenuItem1 = new JRadioButtonMenuItem("Level 1");
  private JRadioButtonMenuItem LevelJRadioButtonMenuItem2 = new JRadioButtonMenuItem("Level 2");
  private JRadioButtonMenuItem LevelJRadioButtonMenuItem3 = new JRadioButtonMenuItem("Level 3");
  private JRadioButtonMenuItem LevelJRadioButtonMenuItem4 = new JRadioButtonMenuItem("Level 4");
  private JRadioButtonMenuItem LevelJRadioButtonMenuItem5 = new JRadioButtonMenuItem("Level 5");
  private JMenu jmu_Highscore = new JMenu("Highscore");
  private JMenuItem HighscoreJMenuItem1 = new JMenuItem("Anzeigen");
  private JMenuItem HighscoreJMenuItem2 = new JMenuItem("löschen");
  private JMenuItem HighscoreJMenuItem3 = new JMenuItem("Laden");
  private JMenuItem HighscoreJMenuItem4 = new JMenuItem("Speichern");
  private JMenuItem HighscoreJMenuItem5 = new JMenuItem("Eingeben");
  private JMenu jmu_Hilfe = new JMenu("Hilfe");
  private JMenuItem HilfeJMenuItem1 = new JMenuItem("Hilfe");
  private JMenuItem HilfeJMenuItem2 = new JMenuItem("Info");
  private ButtonGroup LevelRadioButton = new ButtonGroup();
  public boolean Pause=true;
  public Spielfeld SpielFeldBAP = new Spielfeld();
  public static int mausX,mausY;
  // Ende Variablen

  public BAP_Spiel(String title) {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { System.exit(0); }
    });
    addMouseMotionListener(new MouseMotionListener() {
      public void mouseDragged(MouseEvent e) {

      }

      public void mouseMoved(MouseEvent e) {
        mausX = e.getX();
        mausY = e.getY();

      }
    });
    int frameWidth = 800;
    int frameHeight = 600;

    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2 ;
    setLocation(x, y);

    SpielFeldBAP.setDoubleBuffered(true);
    SpielFeldBAP.setLayout(null);
    Container cp = getContentPane();
    cp.add(SpielFeldBAP);

    // Anfang Komponenten

    setJMenuBar(jmb_menu);
    jmb_menu.add(jmu_Spiel);
        SpielJMenuItem1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        SpielJMenuItem1ActionPerformed(evt); } });
    jmu_Spiel.add(SpielJMenuItem1);
    jmu_Spiel.addSeparator();
    SpielJMenuItem2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        SpielJMenuItem2ActionPerformed(evt); } });
    jmu_Spiel.add(SpielJMenuItem2);
    //Hier wird definiert das die Levelauswahl gruppiert wird sprich immer nur eine Auswahl möglich
    LevelRadioButton.add(LevelJRadioButtonMenuItem1);
    LevelRadioButton.add(LevelJRadioButtonMenuItem2);
    LevelRadioButton.add(LevelJRadioButtonMenuItem3);
    LevelRadioButton.add(LevelJRadioButtonMenuItem4);
    LevelRadioButton.add(LevelJRadioButtonMenuItem5);
    // ENde der definition
    jmb_menu.add(jmu_Level);
    LevelJRadioButtonMenuItem1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        LevelJRadioButtonMenuItem1ActionPerformed(evt); } });
    jmu_Level.add(LevelJRadioButtonMenuItem1);

    LevelJRadioButtonMenuItem2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        LevelJRadioButtonMenuItem2ActionPerformed(evt); } });
    jmu_Level.add(LevelJRadioButtonMenuItem2);

    LevelJRadioButtonMenuItem3.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        LevelJRadioButtonMenuItem3ActionPerformed(evt); } });
    jmu_Level.add(LevelJRadioButtonMenuItem3);

    LevelJRadioButtonMenuItem4.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        LevelJRadioButtonMenuItem4ActionPerformed(evt); } });
    jmu_Level.add(LevelJRadioButtonMenuItem4);

    LevelJRadioButtonMenuItem5.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        LevelJRadioButtonMenuItem5ActionPerformed(evt); } });
    jmu_Level.add(LevelJRadioButtonMenuItem5);

    jmb_menu.add(jmu_Highscore);
    HighscoreJMenuItem5.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HighscoreJMenuItem5ActionPerformed(evt); } });
    jmu_Highscore.add(HighscoreJMenuItem5);

    HighscoreJMenuItem3.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HighscoreJMenuItem3ActionPerformed(evt); } });
    jmu_Highscore.add(HighscoreJMenuItem3);

    HighscoreJMenuItem4.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HighscoreJMenuItem4ActionPerformed(evt); } });
    jmu_Highscore.add(HighscoreJMenuItem4);

    HighscoreJMenuItem1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HighscoreJMenuItem1ActionPerformed(evt); } });
    jmu_Highscore.add(HighscoreJMenuItem1);
   jmu_Highscore.addSeparator();
    HighscoreJMenuItem2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HighscoreJMenuItem2ActionPerformed(evt); } });
    jmu_Highscore.add(HighscoreJMenuItem2);
    jmb_menu.add(jmu_Hilfe);
        HilfeJMenuItem1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HilfeJMenuItem1ActionPerformed(evt); } });
    jmu_Hilfe.add(HilfeJMenuItem1);
    jmu_Hilfe.addSeparator();
    HilfeJMenuItem2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        HilfeJMenuItem2ActionPerformed(evt); } });
    jmu_Hilfe.add(HilfeJMenuItem2);

    // Ende Komponenten



    setResizable(false);
    setVisible(true);

  }

  // Anfang Ereignisprozeduren
  public void SpielJMenuItem1ActionPerformed(ActionEvent evt) {
    Pause=false;
  }
  public void SpielJMenuItem2ActionPerformed(ActionEvent evt) {
    Pause=true;
    DialogBeenden DialogEnde = new DialogBeenden(this,"Ende?",true);
  }
  public void LevelJRadioButtonMenuItem1ActionPerformed(ActionEvent evt) {

  }
  public void LevelJRadioButtonMenuItem2ActionPerformed(ActionEvent evt) {

  }
  public void LevelJRadioButtonMenuItem3ActionPerformed(ActionEvent evt) {

  }
  public void LevelJRadioButtonMenuItem4ActionPerformed(ActionEvent evt) {

  }
  public void LevelJRadioButtonMenuItem5ActionPerformed(ActionEvent evt) {
    Pause=true;
    DialogName DialogNameEingeben = new DialogName(this,"Herzlichen Glückwunsch!",true);
  }

  public void HighscoreJMenuItem1ActionPerformed(ActionEvent evt) {
     Pause=true;
     Highscore.laden("datenNico.ser");
     DialogHighscore DialogHiscoreAnzeigen = new DialogHighscore(this,"Die TOP 10",true);
  }
  public void HighscoreJMenuItem2ActionPerformed(ActionEvent evt) {
    Pause=true;
    DialogHighscoreLoeschen DialogHL = new DialogHighscoreLoeschen(this,"Löschen?",true);
  }
  public void HighscoreJMenuItem3ActionPerformed(ActionEvent evt) {
    Pause=true;
    Highscore.laden("datenNico.ser");
  }
  public void HighscoreJMenuItem4ActionPerformed(ActionEvent evt) {
    Pause=true;
    Highscore.speichern("datenNico.ser");
  }
    public void HighscoreJMenuItem5ActionPerformed(ActionEvent evt) {
    DialogName DialogNameEingeben = new DialogName(this,"Herzlichen Glückwunsch!",true);
  }
  public void HilfeJMenuItem1ActionPerformed(ActionEvent evt) {
    Pause=true;
    DialogHilfe DialogHilfeAnzeigen = new DialogHilfe(this,"Anleitung",true);
  }
  public void HilfeJMenuItem2ActionPerformed(ActionEvent evt) {
    Pause=true;
    DialogInfo DialogInfoAnzeigen = new DialogInfo(this,"Info",true);
  }
  // Ende Ereignisprozeduren
  
  public void spielAblauf(){
    while (isVisible()){


          while (Pause==false){
                SpielFeldBAP.repaint();

                }
}
  }
  public static void main(String[] args) {
    BAP_Spiel spiel = new BAP_Spiel("BAP Spiel von Bejer / DeLiello / Krieger / Küls");

    spiel.spielAblauf();


  }
}
```


Und das Spielfeld:


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


//class Spielfeld extends JPanel {
class Spielfeld extends JComponent{

      public static final int breite = 794, hoehe = 547, schlaegerBreite = 50, schlaegerHoehe = 12,schlaegerOben=500;
      public boolean balkenTreffer = false;
      public final int anzahlBalkenSpalten = 14,anzahlBalkenReihen = 2;
      
      Ball ball;
      Balken balkenReihe[][] = new Balken[anzahlBalkenReihen][anzahlBalkenSpalten];

      public Spielfeld(){

      setBackground(Color.black);
      


      ball = new Ball(50,450,10);
      ball.setSpeedX(1);
      ball.setSpeedY(1);
      
       for (int i = 1; i < anzahlBalkenReihen; i++) {
         for (int j = 1; j < anzahlBalkenSpalten; j++){
            balkenReihe[i][j] = new Balken((j-1) * 60 + 14,150 - (i * 20),Color.red);
        }
       }
      }
      protected void paintComponent(Graphics g){

      g.setColor(Color.ORANGE);
      g.drawLine(0,0,794,547);


      ball.paintComponent(g);
          for (int i=1;i<anzahlBalkenReihen;i++){
      for (int j=1;j<anzahlBalkenSpalten;j++){
        if (balkenReihe[i][j].getGetroffen() == false){
          balkenReihe[i][j].paintComponent(g);
        }
      }
    }
      g.setColor(Color.gray);
      g.fill3DRect(BAP_Spiel.mausX - schlaegerBreite/2, schlaegerOben, schlaegerBreite, schlaegerHoehe, true);

      ball.bewegen(balkenTreffer);
          balkenTreffer = false;
    ball.testeObSchlaegerGetroffen(schlaegerOben,schlaegerOben+schlaegerHoehe,BAP_Spiel.mausX - schlaegerBreite/2,BAP_Spiel.mausX + schlaegerBreite/2);


    for (int i=1;i<anzahlBalkenReihen;i++){
      for (int j=1;j<anzahlBalkenSpalten;j++){
      if (balkenReihe[i][j].getGetroffen() == false){
        balkenReihe[i][j].pruefeTreffer(ball.getBallX(),ball.getBallY(),ball.getBallRadius());
        if (balkenTreffer == false){
          balkenTreffer = balkenReihe[i][j].getGetroffen();
          if (balkenTreffer == true){

          }//{anzahlTreffer++;}
        }
      }
      }
    }
     }
}
```


----------

