Java paint() klappt nicht

alex1515

Lt. Commander
Registriert
Nov. 2007
Beiträge
1.562
Hey,
hab folgenden Quelltext:
import java.awt.*;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;
import javax.swing.JPanel;

import java.awt.Graphics;



public class Frame extends JFrame {
/**
*
*/
//private static final long serialVersionUID = 1L;
JPanel spielfeld = new JPanel();
JPanel statusleiste = new JPanel();
JFrame f = new JFrame();

public Frame(){
super("Ping Pong");

f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f.setSize( 400, 400 );
f.setVisible( true );

spielfeld.setBackground(Color.BLACK);

statusleiste.setBackground(Color.lightGray);

f.setLayout(new BorderLayout());
f.add( spielfeld , BorderLayout.CENTER);
f.add( statusleiste , BorderLayout.NORTH);

}



public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.RED);
g.fillRect(100, 120, 150, 50);
}

##########Main

public class Main {

/**
* @param args
*/

public static void main(String[] args) {
Frame feld = new Frame();

}

}

Aus irgendwelchen Gründen, will er das rote Rechteck nicht zeichnen. Weiß jemand warum?
 
Ich bin mir nicht sicher, aber rufst du Frame.paint() irgendwo auf?

Du rufst in der Main den Konstruktor auf, aber wo rufst du paint auf?
 
Zuletzt bearbeitet:
abgesehen vom Vorschlag den Zeitschlag gebracht hat,
warum diese Zeile:
JFrame f = new JFrame();

wieso legst du einen extra JFrame an wobei deine Klasse selbst von JFrame abgeleitet ist?


Edit: so funktioniert es
Code:
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;

class Frame extends JFrame {

	JPanel spielfeld = new JPanel();
	JPanel statusleiste = new JPanel();

	public Frame(){
		super("Ping Pong");
		setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		setSize( 400, 400 );
		setVisible( true );

		spielfeld.setBackground(Color.BLACK);

		statusleiste.setBackground(Color.lightGray);

		setLayout(new BorderLayout());
		add( spielfeld , BorderLayout.CENTER);
		add( statusleiste , BorderLayout.NORTH);
	}

	public void paint(Graphics g) {
		super.paint(g);
		g.setColor(Color.RED);
		g.fillRect(100, 120, 150, 50);
	}

}

public class Main {
	public static void main(String[] args) {
		Frame feld = new Frame();

	}
}

@Zeitschlag
scheinbar wird die Paint-Methode irgendwo automatisch aufgerufen, wo kann ja evtl jemand anders beantworten :)
 
Zuletzt bearbeitet:
Ja, ich habe es gerade mit deiner Lösung versucht, ich musste mich überzeugen, dass ich falsch lag^^
 
Die paint()-Methode einer Komponente (eines Widgets) wird aufgerufen, um ein Widget zu zeichnen. Sie wird automatisch natürlich nur dann aufgerufen, wenn das Widget auch angezeigt wird, was im Original-Code des TE nicht der Fall war, da zwar ein JFrame angezeigt wurde, aber eben nicht vom Typ "Frame" (für den die paint()-Methode überschrieben wurde).
 
Zurück
Oben