Warum ist das Fenster nicht schwarz?

NHI

Mitglied
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
 
Du solltest Code lieber direkt als Text hier reinkopieren. Und BITTE auch mit code-Tags.
Lösung zu deinem Problem:
Java:
Var.jf1.getContentPane().setBackground(java.awt.Color.BLACK);
 
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.
 
Evtl. weil Du paintcomponent und nicht paintComponent geschrieben hast? Die @Override-Annotation hilft, solche Fehler zu vermeiden:
Code:
@Override
public void paintComponent(Graphics g)
 
@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 derSpoiler 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 😉
 
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();

}


}
Code:
 
Code:
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();
       
    }
   
   
}
 
Code:
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);
       
       
}
}
 
Code:
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
    }

}
 
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.
 
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
 
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:

Java:
@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.
 

Zurück
Oben