paint() wird nicht aufgerufen

thiele

Neues Mitglied
hallo,

ich bin neu in java und habe nun einige zeit lang versucht mit swing ein grid von quadraten zeichnen zu lassen. leider bin ich bisher erfolglos, alles was ich bekomme ist ein weisses fenster.

das problem ist, dass die paint() methode der square bzw geometricobject klasse nicht aufgerufen wird. ich hoffe jemand kann mir sagen wo das problem liegt.

da ich nicht genau weiss wo die ursache liegt muss ich den ganzen quelltext posten, ich hoffe das ist nicht schon zu viel fuer das problem.

hier meine main methode und drei klassen code:

main methode
Java:
import java.awt.*;
import javax.swing.JPanel;
import javax.swing.BorderFactory;

public class Main
{
	public static void main(String[] args)
	{
		MemoryFrame ellosFramos = new MemoryFrame();
	}
}

memoryframe klasse
Java:
import javax.swing.JFrame;
import java.awt.GridLayout;
import java.awt.*;

class MemoryFrame extends JFrame
{
	private GeometricObject geometricObjects[];

	MemoryFrame()
	{
		//super();
		setSize(400,500);
		setTitle("default");
		setLocation(100,400);
		setLayout(new GridLayout(8,8,3,3));

		geometricObjects = new GeometricObject[100];

		for (int i=0; i < geometricObjects.length; i++)
		{
			geometricObjects[i] = new Square();
		}

		setVisible(true);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
}

geometric object klasse
Java:
import java.awt.*;
import javax.swing.JPanel;
import javax.swing.BorderFactory;

abstract class GeometricObject extends JPanel
{
	private Color fgColor, bgColor, borderColor;
	private Dimension dim;
	private double relativeSize;

	GeometricObject() {
		super();
		setFgColor(rndCol());
		setBgColor(rndCol());
		setBorderColor(rndCol());
		System.out.println("GeoMetr CTOR"+getSize());
		relativeSize = Math.random(); 
	}
	GeometricObject(Color fgColor, Color bgColor, Color borderColor )
	{
		super();
		setFgColor(fgColor);
		setBgColor(bgColor);
		setBorderColor(borderColor);
		
	}

	public void setFgColor (Color fgColor)
	{
		this.fgColor = fgColor;
	}

	public void setBgColor (Color bgColor)
	{
		this.bgColor = bgColor;
	}

	public void setBorderColor (Color borderColor)
	{
		this.borderColor = borderColor;
	}

	@Override
	public void paint(Graphics g)
	{
		super.paint(g);
		System.out.println("paint() is called");
		g.setColor(fgColor);
		dim = getSize();

		int midWidth = dim.width / 2;
	        int midHeight = dim.height / 2;
        
	        int width = (int)(dim.width*relativeSize);
	        int height = (int)(dim.height*relativeSize);
        
	        int length = Math.min(width, height);
   
	        int relativeSetPointX = midWidth - (length / 2);
	        int relativeSetPointY = midHeight - (length / 2);
		specialPaint(g, length, relativeSetPointX, relativeSetPointY);
	}

	private Color rndCol()
	{
		int high = 256;
		return new Color((int)(Math.random() * high), (int)(Math.random() * high), (int)(Math.random() * high));
	}

	abstract public void specialPaint(Graphics g, int size, int relativeSetPointX, int relativeSetPointY); 	

}

square klasse
Java:
import java.awt.*;
import javax.swing.JFrame;

class Square extends GeometricObject
{
	Square ()
	{
		super();
		System.out.println("Square CTOR");
	}

	@Override
	public void specialPaint(Graphics g, int size, int relativeSetPointX, int relativeSetPointY)
	{
		System.out.println("special Paint");
		g.fillRect(relativeSetPointX,relativeSetPointY,size,size);
	}
}


vielen dank schonmal im vorraus,

mfg
thiele
 
Du musst die Square Objekte noch irgend nem Container hinzufügen. Von alleine machen die gar nichts. Außerdem überschreibt man in Swing die paintComponent Methode, nicht die paint Methode.
 
nice, danke dir. mit add(geometricObjects); in der for schleife aus MemoryFrame.java hat es geklappt. Ist ja auch total logisch - ich hatte da gestern nur keinen Kopf mehr fuer ^^

Danke auf jedenfall.
 

Neue Themen


Zurück
Oben