# Warum ist das Fenster nicht schwarz?



## NHI (25. Jun 2018)

Hi, es tut mir leid wenn ich euch hier mit einer solchen Anfänger lapalie belästige aber ich bräuchte da echt Hilfe.

Danke im voraus Screenshots folgen


----------



## NHI (25. Jun 2018)




----------



## NHI (25. Jun 2018)

Ich habe das aus einem youtube tutorial von youtube "Pong programmieren in Java"


----------



## httpdigest (25. Jun 2018)

Du solltest Code lieber direkt als Text hier reinkopieren. Und BITTE auch mit code-Tags.
Lösung zu deinem Problem:

```
Var.jf1.getContentPane().setBackground(java.awt.Color.BLACK);
```


----------



## NeuHier6 (25. Jun 2018)

Jetzt noch Deine Frage...


----------



## NHI (25. Jun 2018)

Also erst mal danke für die raschen und durchaus hilfreichen Antworten.Ja das hat mich weiter gebracht aber warum werden die JLabels nicht gezeichnet  (müsste noch ne weiss gestrichelte Linie verlaufen), wäre nett wenn mir da auch noch geholfen werden könnte, wie gesagt bin halt ein Anfänger.


----------



## mihe7 (26. Jun 2018)

Evtl. weil Du paintcomponent und nicht paintComponent geschrieben hast? Die @Override-Annotation hilft, solche Fehler zu vermeiden:

```
@Override
public void paintComponent(Graphics g)
```


----------



## NHI (26. Jun 2018)

kann gut sein ich probiers mal danke für die schnelle und hilfreiche Antwort


----------



## NHI (26. Jun 2018)

Nein daran liegt es nicht es funktioniert immer noch nicht


----------



## mihe7 (26. Jun 2018)

Lad mal ein ZIP mit Deinen .java-Dateien hoch (src-Verzeichnis reicht).


----------



## NHI (27. Jun 2018)

ich weiss leider nicht was das ist noch wie es geht


----------



## httpdigest (27. Jun 2018)

Let me google this for you: https://de.wikipedia.org/wiki/ZIP-Dateiformat
Du sollst einfach deine Java Quelldateien zur Einsicht stellen und nicht mit Screenshots arbeiten.


----------



## NHI (28. Jun 2018)

okay danke kannstz du mir denn bei meinem problem helfen dass die labels nicht gezeichnet werden


----------



## Javinner (28. Jun 2018)

@NHI 
Damit man dich besser versteht, lade doch einfach dein Code in Code-Tags hoch.
Was sind Code-Tags, fragst du dich? Wenn du mir antworten willst, siehst du in der Leiste einige Buttons. Nimm den vierten von Rechts und drücke kurz darauf. Es erscheint ein Menü mit vier Einträgen. Nimm `Code`
, wenn du ein Code-Stück hochladen willst. Nimm dabei `Java`, wenn es sich um Java-Code handelt. 
Wenn du eine Klasse oder mehrere hast, die recht viel Code enthalten, eignet sich der`Spoiler` gut für. Beachte dabei, dass auch im Spoiler der Code in Code-Tags stehen sollte. 

Wenn du etwas hochladen willst, ein Bild zum Beispiel, dann schau dir die drei Buttons unten Rechts an. Wähle `Datei hochladen`, um eine Datei hochzuladen. Schau dich um, `Weitere Einstellungen` bieten weitere Einstellungen an.. 

Hilf den anderen, dir helfen zu wollen


----------



## mihe7 (28. Jun 2018)

Wenn Du mit Zip nicht zurecht kommst, dann kopier ihn einfach als Text hier rein.


----------



## NHI (29. Jun 2018)

okay danke ich werde ihn dann so rein stellen


----------



## NHI (30. Jun 2018)

package pack1;

import java.awt.*;

import javax.swing.JLabel;

public class Draw extends JLabel {

   /**
    *
    */
   private static final long serialVersionUID = 1L;

   protected void paintcomponent (Graphics g) {

       super.paintComponent( g);

       Graphics2D g2D = (Graphics2D) g;
       g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

       g.setColor(Color.black);
       g.fillRect(0, 0, Var.screenBreite, Var.screenHöhe);                    // hier taucht das problem auf, dass das fenster beim abspielen des programms nicht schwarz ist

       g.setColor(Color.white);

       for (int i = 0; i <= 30; i++)  {
           g.fillRect(Var.screenBreite/2-5, i*20, 10, 10);

       }

       repaint();

   }


}
	
	
	
	





```

```


----------



## NHI (30. Jun 2018)

```
package pack1;

import java.awt.*;

import javax.swing.JLabel;

public class Draw extends JLabel {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    protected void paintcomponent (Graphics g) {
       
        super.paintComponent( g);
       
        Graphics2D g2D = (Graphics2D) g;
        g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
       
        g.setColor(Color.black);
        g.fillRect(0, 0, Var.screenBreite, Var.screenHöhe);                    // hier taucht das problem auf, dass das fenster beim abspielen des programms nicht schwarz ist
          
        g.setColor(Color.white);
       
        for (int i = 0; i <= 30; i++)  {
            g.fillRect(Var.screenBreite/2-5, i*20, 10, 10);
           
        }
       
        repaint();
       
    }
   
   
}
```


----------



## NHI (30. Jun 2018)

sorry hat ein wenig gedauert bis ich es hinbekommen habe also dass ist die draw Klasse jetzt kommt noch GUI und Var


----------



## NHI (30. Jun 2018)

```
package pack1;

import javax.swing.*;

public class GUI {

    public GUI() {
        // TODO Auto-generated constructor stub
        Var.jf1 = new JFrame();
        Var.jf1.setSize(Var.screenBreite, Var.screenHöhe);
        Var.jf1.setTitle("Pong");
        Var.jf1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Var.jf1.setLayout(null);
        Var.jf1.setResizable(false);
        Var.jf1.setVisible(true);
        Var.jf1.setLocationRelativeTo(null);
        Var.jf1.addKeyListener(new KeyHandler());
        Var.jf1.requestFocus();
        Var.jf1.getContentPane().setBackground(java.awt.Color.BLACK);
       
        Draw lbldraw = new Draw();
        lbldraw.setBounds( 0,0, Var.screenBreite, Var.screenHöhe );
        lbldraw.setVisible(true);
        Var.jf1.add(lbldraw);
       
       
}
}
```


----------



## NHI (30. Jun 2018)

```
package pack1;

import javax.swing.*;

public class Var {
     static JFrame jf1;
     static int screenBreite = 800, screenHöhe = 600;
     static int x = 20, y = 185;
     static boolean moveup = false, movedown = false ;
    public Var() {
        // TODO Auto-generated constructor stub
    }

}
```


----------



## mihe7 (30. Jun 2018)

KeyHandler und die Main-Klasse fehlen noch.


----------



## mihe7 (30. Jun 2018)

OK, lass stecken: wie ich eingangs schon geschrieben habe, heißt die Methode in Draw nicht paintcomponent sondern paintComponent.  Wenn Du sie umbenennst, dann bekommst Du die weißen Punkte und die Zeile `Var.jf1.getContentPane().setBackground(java.awt.Color.BLACK);` in GUI brauchst Du dann auch nicht mehr.


----------



## NHI (30. Jun 2018)

ok vielen dank ich hatte es schon einmal versucht aber da hat nichts funktioniert jetzt funktioniert es dankeschön


----------



## NHI (30. Jun 2018)

keine Ahnung vielleicht habe ich nicht das c der methode verändert komisch aber vielen dank, das ist jetzt wirklich ein wichtiger Erfolgsmoment für mich  

den anderen natürlich auch herzlichen Dank


----------



## mihe7 (1. Jul 2018)

Swing-Komponenten haben eine Methode paintComponent(Graphics), die beim Zeichnen des Containers, der die Komponente enthält, aufgerufen wird. Deine Draw-Klasse erweitert JLabel und wird damit selbst zu einer Swing-Komponente. Daher kannst Du sie auch wie jede andere Swing-Komponente verwenden.

Wenn Du in Draw eine Methode paintcomponent (statt paintComponent) erstellst, wird diese Methode niemals aufgerufen, denn Swing kennt diese Methode nicht. Stattdessen wird die von JLabel geerbte paintComponent-Methode ausgeführt. 

Du willst aber die von JLabel geerbte Methode paintComponent-Methode überschreiben. So ein Tippfehler ist natürlich schnell passiert. Deshalb bietet es sich an, vor die Methodendeklaration ein @Override zu schreiben. Damit gibst Du bekannt, dass die folgende Methode eine geerbte Methode überschreibt. Das hätte bei Dir dann so ausgesehen:


```
@Override
protected void paintcomponent(Graphics g) { .. }
```

Probier das mal aus. Du wirst sehen, dass Du dann einen Compilerfehler bekommst bzw. Dir die IDE (Eclipse/NetBeans/...) bereits einen Fehler anzeigt.


----------



## NHI (3. Jul 2018)

OK Danke ich werde versuchen das zu erkenen und anzuwenden


----------

