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
memoryframe klasse
geometric object klasse
square klasse
vielen dank schonmal im vorraus,
mfg
thiele
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