paintComponent in JPanel in JFrame

Azubi96

Mitglied
Ich arbeite derzeit an einem kleinen Java Spiel. Ein Snake Spiel um genauer zu sein. Dabei verfolge ich folgendes Konzept:
Ich habe eine Surface Klasse, welche direkt in der main-Methode initialisiert wird.
Die Surface Klasse enthält die gesamte Oberfläche und fängt alle Aktionen vom Benutzer auf (KeyListener)
In der Surface Klasse initialisiere ich ein Snake Objekt. Dieses Snake Objekt erbt von keiner Klasse.

Zu meinem Problem: Wie man es vom Snake kennt, frisst dieser irgendwelche Objekte, und wird danach grösser. Und diese Objekte (bei mir Diamanten) anzuzeigen, habe ich die paintComponent Methode in meiner Surface Klasse implementiert. Jedoch schein diese noch nicht zu funktionieren. Sobald ich ein repaint() einsetzt, scheint die Schlange unterhalb des JPanels zu sein. Und ist nur noch zu sehen, wenn sich

Und natürlich noch Code, um das Ganze zu verdeutlichen:
Java:
public Surface(int width, int height)
	{
	    this.width = width;
	    this.height = height;
	    // Create the JFrame
	    jframe.setSize(width, height);
            jframe.setResizable(false);
	    jframe.setLayout(null);
	    jframe.add(this); // Add the JPanel to the JFrame
	    jframe.setVisible(true);
		
	    // Create the JPanel
	    setLayout(new BorderLayout());
	    setBounds(0, 0, 400, 400);
	    setBackground(Color.DARK_GRAY);
				
	    // Add the KeyListener
	    addKeyListener(this);
	    setFocusTraversalKeysEnabled(true);
	    setFocusable(true);
	    requestFocusInWindow();
	}

    @Override
    public void paintComponent(Graphics g){
	    super.paintComponent(g);
	    g.drawRect(50, 50, 40, 40);
	    g.setColor(Color.RED);
	    repaint();
    }

Und ausserdem. Hier erstelle ich meine Schlange (und ja, ich habe absichtlich Buttons gewählt :) )
Java:
private void createSnake()
    {
    	snakeButtonx[0] = 100; //Sets the starter position of the snake
        snakeButtony[0] = 150;
        JButton tempButton; //temporary Button for adding button to the Snake
        
        // Initially the snake has small length 3
	    for (int i = 0; i < sizeSnake; i++) 
	    {
	    	snakeButton[i] = new JButton("" + i);
	    	snakeButton[i].setEnabled(false); // Disable the buttons so you cant click it
	        
	        tempButton = snakeButton[i];
	        Surface.jframe.add(tempButton);
	
	        
	        snakeButton[i].setBounds(snakeButtonx[i], snakeButtony[i], 10, 10);
	        snakeButtonx[i + 1] = snakeButtonx[i] - 10;
	        snakeButtony[i + 1] = snakeButtony[i];
	    }
    }

Hier noch 2 kleine Screenshots:
Ohne paintComponent


Mit paintComponent. Die Schlange ist nun nur noch zu sehen, wenn man auf dem JFrame ist.


Ich hoffe ihr seid nicht zu streng mit mir, da ich recht neu in der Programmierung bin ^^
 

Azubi96

Mitglied
Doch, von Object!

Ach ja, dein Problem sollte sich ganz einfach mit "JFrame#setContentPane" lösen lassen.

PS. Wovon wird Surface eigentlich abgeleitet?
PPS. Die richtige Antwort lautet hier "JComponent", und nicht "JPanel".

Erstmal danke für deine Antwort.
Also theoretisch müsste ich doch einfach
Java:
jframe.setContentPane(this);
am Ende meines Konstruktors schreiben. Scheint jedoch trotzdem nicht ganz zu funktionieren. Oder liege ich dabei falsch?

PS: Warum wird eigentlich paintComponent nicht richtig ausgeführt? Ich sehe nur die Umrisse, obwohl ich die Farbe rot gesetzt habe.
 

Azubi96

Mitglied
JPanel#add( JButton );
JButton#setBounds( ... );

Danke dir. Hat auch perfekt funktioniert
Noch die letzte Frage:
Wie würde es aussehen wenn ich die Buttons von einer anderen Klasse (Snake), welche von Surface erbt, zum JPanel hinzufügen wollte. Sprich: Surface erbt von JPanel. Snake erbt von Surface.
Würde es dann nicht einfach heißen

Java:
super.add(testButton);
testButton.setBounds(100, 100, 10, 10);
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Thread und jpanel-paintcomponent kombinierbar?? Spiele- und Multimedia-Programmierung 14
B paintComponent Methode Spiele- und Multimedia-Programmierung 4
GRAZZ0R "PaintComponent" und "MouseListener" einbinden Spiele- und Multimedia-Programmierung 4
S PaintComponent zeichnet in falscher reihenfolge Spiele- und Multimedia-Programmierung 8
R BufferStrategy vs. paintComponent Spiele- und Multimedia-Programmierung 9
W JOGL bleibt nach display() in PaintArea.paintComponent hängen Spiele- und Multimedia-Programmierung 5
B paintComponent() , Parameter Spiele- und Multimedia-Programmierung 2
R JPanel wird erst im Fullscreen angezeigt Spiele- und Multimedia-Programmierung 1
P selectedItem aus einem Methodenerstellten JPanel auslesen. Spiele- und Multimedia-Programmierung 5
M JPanel mit Graphics2D Objekten mit JScrollpane Spiele- und Multimedia-Programmierung 6
K JPanel wechseln & Neu starten - SnakeSpiel Spiele- und Multimedia-Programmierung 2
N JPanel Inhalt aktualisiert nach Thread.sleep nicht Spiele- und Multimedia-Programmierung 2
E Animiertes JPanel dynamisch wechseln Spiele- und Multimedia-Programmierung 3
W Panel/JPAnel createImage() Exception Spiele- und Multimedia-Programmierung 2
R Probleme mit JPanel!KeyListener geht nicht Spiele- und Multimedia-Programmierung 6
T Problem bei LinkedList / JPanel Spiele- und Multimedia-Programmierung 4
C 2D Sprites an die JPanel Größe (Auflösung) anpassen/skalieren Spiele- und Multimedia-Programmierung 3
F Vektorgrafik in JPanel Spiele- und Multimedia-Programmierung 5
E Active Rendering im FSEM auf ein JPanel? Spiele- und Multimedia-Programmierung 4
L 2D-Spiele ruckeln auf JPanel Spiele- und Multimedia-Programmierung 7
A Mehrere geometrische Objekte in JPanel zeichnen Spiele- und Multimedia-Programmierung 4
X JPanel dynamisch (Koordinatensystem)? Spiele- und Multimedia-Programmierung 30
M Jpanel Graphik speichern Spiele- und Multimedia-Programmierung 6
DamienX Canvas vs JPanel Spiele- und Multimedia-Programmierung 15
S Problem mit JPanel bzw p a i n t Spiele- und Multimedia-Programmierung 6
K stringWidth bei Graphics von JPanel und Printer unterschiedl Spiele- und Multimedia-Programmierung 4
R SimpleUniverse in JPanel Spiele- und Multimedia-Programmierung 4
M 1. Menüleiste wird doppelt gezeichnet 2. awt auf ein jpanel Spiele- und Multimedia-Programmierung 4
M Jpanel mit Keylistener Spiele- und Multimedia-Programmierung 6
D 2D Graphic Objekte in ein JPanel einfügen Spiele- und Multimedia-Programmierung 2
B Mehrere Klassen auf JFrame Spiele- und Multimedia-Programmierung 3
P Teamspeak interface mit JFrame funktioniert nicht Spiele- und Multimedia-Programmierung 3
T JFrame Background Spiele- und Multimedia-Programmierung 5
RalleYTN OpenGL Context im JFrame? Spiele- und Multimedia-Programmierung 0
Silvascus Bild --> JFrame Hintergrund Spiele- und Multimedia-Programmierung 3
Y Hintergrundbild in Jframe einfügen Spiele- und Multimedia-Programmierung 8
J Int Wert auf JFrame zeichnen Spiele- und Multimedia-Programmierung 3
J Menü für Snakespiel in einzelnem JFrame Spiele- und Multimedia-Programmierung 5
M JFrame blockiert java Anwendung Spiele- und Multimedia-Programmierung 2
S Probleme mit JMenu in einem JFrame mit BufferStrategy Spiele- und Multimedia-Programmierung 2
D JFrame Resize Polygone anpassen Spiele- und Multimedia-Programmierung 6
A zweite jFrame?? Spiele- und Multimedia-Programmierung 2
C Anfängerfrage: Plazierung Panel im JFrame und KeyLIstener Spiele- und Multimedia-Programmierung 4
D Canvas3D vom JFrame entfernen Spiele- und Multimedia-Programmierung 2
W Java Resourcen Problem (JFrame) Spiele- und Multimedia-Programmierung 8
S FullScreen Modus - Spielschleife überzeichnet zweite JFrame Spiele- und Multimedia-Programmierung 5
G Einen gif oder jpg Datei aus einem Graphics Objekt o. JFrame Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen

Neue Themen


Oben