# Java Buttons



## Java xyrse123 (19. Nov 2017)

Hallo,
Ich möchte bei meinem Pong Spiel noch Buttons für Spiel starten Pause und so weiter einbauen. Doch ich kann Buttons nur in einem leeren Frame hinzufügen, bei dem Pong Spiel werden sie nicht angezeigt. Kann mir wer einen Tipp geben?


----------



## mrBrown (19. Nov 2017)

Java xyrse123 hat gesagt.:


> Kann mir wer einen Tipp geben?


Ja.


----------



## truesoul (20. Nov 2017)

mrBrown hat gesagt.:


> Ja.




Wie ist denn deine Implementation, Java xyrse123?


----------



## Java xyrse123 (20. Nov 2017)

```
Hier der Quellcode:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Pong extends JPanel {
     
      int x = 30, y = 300; // Anfangskoordinaten Schläger 1
      int Px = 200, Py = 200; //Anfangskoordinaten Ball
      int x2 = 770, y2 = 300; //Anfangskoordinaten Schläger 2
      int dPx = 10, dPy = 10; // Geschwindigkeit Ball
      boolean Spieler1o = false; // Pfeiltaste oben am Anfang Taste nicht gedrückt
      boolean Spieler1u = false; // Pfeiltast unten
      boolean Spieler2o = false;
      boolean Spieler2u = false;

      public Pong() {
          setPreferredSize(new Dimension(800, 600)); // Fenstergröße

          Ball neu = new Ball();
          neu.start(); // Thraed Ball wird gestartet
          Schläger s = new Schläger(); // Thread Schläger wird gestartet
          s.start();
      // Hier wollte ich die Buttons setzten
  
 
      button = new JButton("Button");
     
      Pong.setLayout(null);
button.setBounds(100,20,100,20);
Pong.add(button);
}

      public void paint(Graphics gr) { // beiden Schläger und Ball
          Graphics2D g = (Graphics2D) gr; // werden gezeichnet
          g.setColor(Color.WHITE);
          g.fill(g.getClipBounds()); // damit die Zeichnung überschrieben wird
          g.setColor(Color.BLACK);
          g.fillRect(x, y, 10, 80); // Ball und Schläger werden gezeichnet
          g.fillOval(Px, Py, 30, 30);
          g.fillRect(x2, y2, 10, 80);
      }

      
      class Ball extends Thread { // thread für Ball
          void bewegen() {
              Px = Px + dPx; //die Bewegung
              Py = Py + dPy;

              if (Px < 0) { // Ball prallt von der Wand ab
                  Px = 0;
                  dPx = -dPx;
              }
              if (Py < 0) {  // Ball prallt von der Wand ab
                  Py = 0;
                  dPy = -dPy;
              }
              if (Py > 570) { // Ball prallt von der Wand ab
                  Py = 570;
                  dPy = -dPy;
              }
              if (Px > 770) { // Ball prallt von der Wand ab
                  Px = 770;
                  dPx = -dPx;
              }

              if (Px == 40 && Py >= y && Py <= y + 80) { // Hier soll er vom Schläger1 abprallen
                  Px = 40;
                  dPx = -dPx;               
              }

              if (Px == 740 && Py >= y2 && Py <= y2 + 80) {//// Hier soll er vom Schläger2 abprallen
                                                             
                  Px = 740;
                  dPx = -dPx;
                  dPy = -dPy;
              }
              repaint();
          }

          public void run() { // Thread für Ball

              while (!isInterrupted()) {

                  bewegen();
                  try {
                      Thread.sleep(50);
                  } catch (InterruptedException e) {
                      return;
                  }
              }
          }
      }

      class Schläger extends Thread implements KeyListener {
          Schläger() {
              addKeyListener(this); // KeyListenr wird hinzugefügt
          }

          public void run() {

              while (true) { // solange Spieler Taste drückt
                                  //wird Schläger bewegt
                if (Spieler1o == true) { // Bewegung Schläger1
                      y -= 12;
                  }
                  if (Spieler1u == true) {
                      y += 12;
                  }
                  if (Spieler2o == true) { // Bewegung Schläger2
                      y2 -= 12;
                  }
                  if (Spieler2u == true) {
                      y2 += 12;
                  }
                 
                    if (y2 > 520) { // 600-80 wegen Schlägerlänge
                      y2 = 520; // Damit die Schläger nicht aus dem Bild verschwinden
                  }
                  if (y2 < 0) {
                      y2 = 0;
                  }
                  if (y < 0) {
                      y = 0;
                  }
                  if (y > 520) {
                      y = 520;
                  }
                  repaint();
                  try {
                      Thread.sleep(50);
                  } catch (InterruptedException e) {
                      e.printStackTrace();
                  }
              }
          }

          public void keyPressed(KeyEvent e) { // Spieler 1 hier wird geguckt ob Taste gedrückt
              if (e.getKeyCode() == KeyEvent.VK_W) {
                  Spieler1o = true;
              }
              if (e.getKeyCode() == KeyEvent.VK_S) {
                  Spieler1u = true;
              }
             
              if (e.getKeyCode() == KeyEvent.VK_UP) { // Spieler2 hier wird geguckt ob Taste gedrückt
                  Spieler2o = true;
              }
              if (e.getKeyCode() == KeyEvent.VK_DOWN) {
                  Spieler2u = true;
              }
          }

          public void keyReleased(KeyEvent e) { // Hier ob Taste wieder losgelassen
              // wenn ja stoppt Schlägerbewegung
            if (e.getKeyCode() == KeyEvent.VK_W) {
                  Spieler1o = false;
              }
              if (e.getKeyCode() == KeyEvent.VK_S) {
                  Spieler1u = false;
              }
              if (e.getKeyCode() == KeyEvent.VK_UP) {
                  Spieler2o = false;
              }
              if (e.getKeyCode() == KeyEvent.VK_DOWN) {
                  Spieler2u = false;
              }
          }

          public void keyTyped(KeyEvent e) {
          }
      }
}


und die Hauptklasee:

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

public class Fenster extends JFrame {
   private Pong pong = new Pong();

   public Fenster() {
     setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
     getContentPane().add(pong);

     pong.PositionBall();
     pack();
     getRootPane();setVisible(true);

     pong.PositionSchläger2();
     pong.PositionSchläger1();
     pong.setFocusable(true);

   }

   public static void main(String[] args) {
     new Fenster();

   }
}
```


----------



## Java xyrse123 (20. Nov 2017)

Ich wollte auch noch fragen wie ich den Hintergrund ändern kann. Ich hatte das schon mit setBackground() versucht, doch es hat nicht funktioniert.


----------



## Mülchmann (21. Nov 2017)

Hallo xyrse123,


```
button = new JButton("Button");
    
      Pong.setLayout(null);
button.setBounds(100,20,100,20);
Pong.add(button);
```


als erstes fehlt das JButton vor dem Button, damit es überhaupt funktionieren kann und als weiteren Tipp würde ich sagen, den Button nicht Button zu nennen. 

```
JButton button = new JButton("Start/Pause");
```

Zudem benötigst du kein Pong mehr, da du dich ja schon darauf beziehst.

```
add(button);
```
oder

```
this.add(button);
```
reicht da vollkommen

Aber da dein Pong noch nicht richtig funktioniert, würde ich mich erstmal nicht mit irgendwelchen Buttons beschäftigen, sondern es erstmal zum laufen bringen.
Und als weiteren Tipp würde ich dir empfehlen nicht mit setBounds zu arbeiten. Nutz lieber ein ordentliches Layout und füge den Button darüber in die Oberfläche ein.


Gruß
Mülchmann


----------



## Java xyrse123 (21. Nov 2017)

Hallo,
Ich habe die Sachen verbessert doch es funktioniert immer noch nicht. Und was meinst du mit nicht richtig funktioniert das meiste funktioniert schon, ich muss nur noch das Spiel auf Ausgangsstellung bei einem Punkt setzten und das dass Spiel erst startet wenn ich den Button
"Start" drücke.

Gruß
xyrse123


----------

