# GUI Verständnisfrage.



## mankingwwe (28. Mai 2015)

Ich habe ein Frame mit zwei Quadraten --> siehe bild

Der Quellcode lautet:

[Java]

package game;
import javax.swing.*;
import java.util.*;
import java.applet.*;
import java.awt.event.*;
import java.awt.*;

public class Spiel extends JPanel implements KeyListener
{
  JFrame fenster;

  int A_Y = 150; // Höhenregler Spieler A
  int B_Y = 150; // Höhenregler Spieler B
  Graphics g;


  Spiel()
  { fenster = new JFrame();
    fenster.add(this);            
    fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    fenster.setExtendedState(JFrame.MAXIMIZED_BOTH);       
    fenster.getContentPane().setBackground(Color.blue);   
    fenster.addKeyListener(this);
    fenster.pack();
    fenster.setVisible(true);


  }


  protected void paintComponent( Graphics g){
    this.g = g;
    int ha = A_Y;
    int hb = B_Y; 
    g.clearRect(0,0,this.getWidth(),this.getHeight());
    g.drawRect(50,ha,50,150);
    g.fillRect(50,ha,50,150);  
    g.drawRect(1550,hb,50,150);
    g.fillRect(1550,hb,50,150);
    repaint();



  }

  public void keyPressed(KeyEvent e)
  { if( e.getKeyCode() == 40) // 40 Code für runter
    {
      B_Y = B_Y + 30;  
    }  

    if( e.getKeyCode() == 38) // 38 Code für rauf
    {
      B_Y = B_Y - 30;  
    }


    if( e.getKeyCode() == 87) // rauf
    {
      A_Y = A_Y - 30;  
    }


    if( e.getKeyCode() == 83) // runter
    {
      A_Y = A_Y + 30;  
    }    

  }

  public void keyTyped(KeyEvent e)
  { 
  }

  public void keyReleased(KeyEvent e)
  {   
  }              




} [/Java]

Meine Fragen: 

1.) Gibt es eine Möglichkeit für mich eines der Quadrate anzusprechen und ihm eine Farbe zu geben?
Ich möchte generell gerne wissen, wie die Methode paintComponent zwischen 2, oder mehreren  Zeichnungen unterscheiden kann.

2.) Ich habe die Background Color auf Blue gestellt und es verändert sich nichts, wieso? 

Wäre für auführliche verständliche Antworten sehr dankbar!


----------



## kaoZ (28. Mai 2015)

> g.drawRect(50,ha,50,150);
> g.fillRect(50,ha,50,150);



Das hier wäre in dem Fall dein eines Rechteckt, das andere logischerweise das andere , farbe änden kannst du über das Graphics Object, welches dir von dem Grafikkontext übergeben wird und mit welchem du dann eben das Rechteck zeichnest.

Was genau willst du denn machen ?  Pong ?

Ich sehe da auch nirgends das du über _g.setColor(Color.Blue);_ die Farbe einstellst ...

Dann fang erstmal an und erstelle variablen für die zu zeichneneden koordinaten, und geh dazu über ggf. direkt rechtecke zu erstellen und diese dann zu zeichnen.

So wie du das da versuchst funktioniert das nicht , wenn das ein Spiel werden soll, musst du eben auch einfach erstmal einen GameLoop haben in welchem deine Spiellogik dann abläuft, nur mit der reinen Gui isses leider nicht getan ^^

Außerdem sollte man bei Spielen dazu übergehen und Aktiv statt passiv zeichnen, anders als bei normalen Desktop-Anwendungen etc... da du sonst davon abhängig bist wann das Toolkit für richtig hält repaint() aufzurufen


----------

