G
GGG
Gast
Hi,
Ich will ein kleines Paint programm schreiben, und habe mich entschieden folgendes zu tun:
Abstracte Klasse GeometrischeFiguren
Klasse Kreis extends GeometrischeFiguren
Klasse Gui (extends JPanel)
Ich habe in der Klasse Gui ein ArrayList<GeometrischeFiguren> und speichere darin derzeit nur Kreise. Um sie zu zeichnen benutze ich ein JPanel und die Methode paintComponent(Graphics g)
Um die Kreise (später auch andere Figuren) zu zeichnen, mache ich folendes:
Die Kreis-toString Methode liefert folgende Daten:
Kreis;10;10;10.0;10.0
(Klassenname;xPosition,yPosition,Weite,Höhe)
doch genau hier, dadurch, das ich schaue, welche Klasse es ist, nutzte ich doch nicht den Sinn des Polymorphismus, doch leider weiß ich nicht (auch nicht nach längerer Überlegung), wie ich es anders schreiben sollte...
Hier alle Klassen um eventuelle Fragen vw. Realisierung... Wie hast du denn das oder das geschrieben zu vermeiden:
Gui.java
GeometrischeFiguren.java
Kreis.java
Danke schonmal im Vorraus
MfG GGG
Ich will ein kleines Paint programm schreiben, und habe mich entschieden folgendes zu tun:
Abstracte Klasse GeometrischeFiguren
Klasse Kreis extends GeometrischeFiguren
Klasse Gui (extends JPanel)
Ich habe in der Klasse Gui ein ArrayList<GeometrischeFiguren> und speichere darin derzeit nur Kreise. Um sie zu zeichnen benutze ich ein JPanel und die Methode paintComponent(Graphics g)
Um die Kreise (später auch andere Figuren) zu zeichnen, mache ich folendes:
Code:
public void paintComponent(Graphics g)
{
for(GeometrischeFiguren gf : figuren)
{
StringTokenizer st = new StringTokenizer(gf.toString(), ";");
String klassenname = st.nextToken();
if(klassenname.equals("Kreis"))
{
g.setColor(gf.farbe);
g.drawOval(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), (int)Double.parseDouble(st.nextToken()), (int)Double.parseDouble(st.nextToken()));
}
}
}
Die Kreis-toString Methode liefert folgende Daten:
Kreis;10;10;10.0;10.0
(Klassenname;xPosition,yPosition,Weite,Höhe)
doch genau hier, dadurch, das ich schaue, welche Klasse es ist, nutzte ich doch nicht den Sinn des Polymorphismus, doch leider weiß ich nicht (auch nicht nach längerer Überlegung), wie ich es anders schreiben sollte...
Hier alle Klassen um eventuelle Fragen vw. Realisierung... Wie hast du denn das oder das geschrieben zu vermeiden:
Gui.java
Code:
import java.awt.Color;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.StringTokenizer;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Gui extends JPanel
{
private JFrame frame;
private ArrayList<GeometrischeFiguren> figuren = new ArrayList<GeometrischeFiguren>();
public void paintComponent(Graphics g)
{
for(GeometrischeFiguren gf : figuren)
{
System.out.println(gf);
StringTokenizer st = new StringTokenizer(gf.toString(), ";");
String klassenname = st.nextToken();
if(klassenname.equals("Kreis"))
{
g.setColor(gf.farbe);
g.drawOval(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), (int)Double.parseDouble(st.nextToken()), (int)Double.parseDouble(st.nextToken()));
}
}
}
public Gui()
{
GeometrischeFiguren a = new Kreis();
neueFigur(a);
GeometrischeFiguren b = new Kreis(Color.red, true, 100, 50, 5);
neueFigur(b);
frame = new JFrame("DrawIt!");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(this);
frame.setSize(500, 500);
frame.setResizable(false);
frame.setVisible(true);
}
public static void main(String[] args)
{
new Gui();
}
public boolean neueFigur(GeometrischeFiguren gf)
{
return figuren.add(gf);
}
public GeometrischeFiguren entferneFigur(int index)
{
return figuren.remove(index);
}
}
Code:
import java.awt.Color;
public abstract class GeometrischeFiguren
{
protected Color farbe;
protected boolean sichtbar;
protected int x, y;
public abstract void zeige();
public abstract void verstecke();
public GeometrischeFiguren()
{
this.farbe = Color.black;
this.sichtbar = true;
this.x = 10;
this.y = 10;
}
public GeometrischeFiguren(Color farbe, boolean sichtbar, int x, int y)
{
this.farbe = farbe;
this.sichtbar = sichtbar;
this.x = x;
this.y = y;
}
}
Code:
import java.awt.Color;
public class Kreis extends GeometrischeFiguren
{
private double radius;
public Kreis()
{
super();
this.radius = 10;
}
public Kreis(Color farbe, boolean sichtbar, int x, int y, double radius)
{
super(farbe, sichtbar, x, y);
this.radius = radius;
}
public void verstecke()
{
super.sichtbar = false;
}
public void zeige()
{
super.sichtbar = true;
}
public String toString()
{
return Kreis.class.getName() + ";" + super.x + ";" + super.y + ";" + radius + ";" + radius;
}
}
Danke schonmal im Vorraus
MfG GGG