Ich schreibe gerade ein Programm, das verschiedene Formen miteinander kombiniert und in einem Fenster zeichnet.
Mit Formen sind Kreis und Quadrat gemeint. Mit kombiniert meine ich die Formen entweder nebeneinander (seriell) oder untereinander (paralell).
Das Klassendiagramm zu meinem Programm sieht wie folgt aus:
Klasse Form extends JPanel
Klasse Quadrat extends Form:
-> paint Methode, die ein Kreis zeichneit
Klasse Kreis extends Form:
-> paint Methode, die ein Quadrat zeichnet
Klasse Seriell extends Form:
-> FlowLayout bei dem die beiden übergebenen Formen geadded werden
Klasse Paralell extends Form:
-> spezielles Layout, bei dem die beiden übergebenen Formen geadded werden.
Klasse Verzweigung extends JPanel:
-> paint Methode, die eine Verzeigung (rote Linie) zeichnet (wird für Paralell gebraucht)
Klasse Main:
-> hier wird die Form angelegt. z.B. Kreis und Quadrat Paralell, dazu ein Quadrat in Serie geschalten.
Klasse Window extends JFrame:
-> zeichnet das Panel der übergegebenen Form
Hier eine kurze Grafik:
Hier der Source Code wie ich mir das ganze vorgestellt habe:
Mein Problem ist dass ich nicht weiß, wie ich die Berechnung des OffsetY und der Höhe für die Klasse Verzweigung durchführe.
OffsetY gibt an, wo die rote vertikale Linie beginnt, die Höhe gibt an, wie lange diese sein muss.
Mit Formen sind Kreis und Quadrat gemeint. Mit kombiniert meine ich die Formen entweder nebeneinander (seriell) oder untereinander (paralell).
Das Klassendiagramm zu meinem Programm sieht wie folgt aus:
Klasse Form extends JPanel
Klasse Quadrat extends Form:
-> paint Methode, die ein Kreis zeichneit
Klasse Kreis extends Form:
-> paint Methode, die ein Quadrat zeichnet
Klasse Seriell extends Form:
-> FlowLayout bei dem die beiden übergebenen Formen geadded werden
Klasse Paralell extends Form:
-> spezielles Layout, bei dem die beiden übergebenen Formen geadded werden.
Klasse Verzweigung extends JPanel:
-> paint Methode, die eine Verzeigung (rote Linie) zeichnet (wird für Paralell gebraucht)
Klasse Main:
-> hier wird die Form angelegt. z.B. Kreis und Quadrat Paralell, dazu ein Quadrat in Serie geschalten.
Klasse Window extends JFrame:
-> zeichnet das Panel der übergegebenen Form
Hier eine kurze Grafik:
Hier der Source Code wie ich mir das ganze vorgestellt habe:
Mein Problem ist dass ich nicht weiß, wie ich die Berechnung des OffsetY und der Höhe für die Klasse Verzweigung durchführe.
OffsetY gibt an, wo die rote vertikale Linie beginnt, die Höhe gibt an, wie lange diese sein muss.
Java:
public class Main
{
public static void main(String[] args)
{
Quadrat q = new Quadrat();
Kreis k = new Kreis();
Paralell s=new Paralell(q,k);
Paralell p=new Paralell(s,new Kreis());
new Window(p);
}
}
Java:
public class Window extends JFrame
{
public Window(Form form)
{
this.add(form);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
}
}
Java:
public abstract class Form extends JPanel
{
Form f1, f2;
public Form()
{
}
}
Java:
public class Seriell extends Form
{
Form f1, f2;
public Seriell(Form f1, Form f2)
{
this.f1 = f1;
this.f2 = f2;
this.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
this.add(f1);
this.add(f2);
}
}
Java:
public class Paralell extends Form
{
Form f1, f2;
public Paralell(Form f1, Form f2)
{
this.f1 = f1;
this.f2 = f2;
JPanel panelForm = new JPanel(new GridLayout(2,1));
panelForm.add(f1);
panelForm.add(f2);
this.setLayout(new FlowLayout(FlowLayout.CENTER, 0,0));
Verzweigung Links=new Verzweigung(true, f1.GetStartPosition().y, f1.GetHeight()+f2.GetStartPosition().y);
Verzweigung Rechts=new Verzweigung(false, f1.GetStartPosition().y, f1.GetHeight()+f2.GetStartPosition().y);
this.add(Links);
this.add(panelForm);
this.add(Rechts);
}
}
Java:
public class Verzweigung extends JPanel
{
boolean Links;
int Width = 20;
int Height;
int OffsetY
public Verzweigung(boolean Links, int Height, int OffsetY)
{
this.Links = Links;
this.Height=Height;
this.OffsetY=OffsetY;
this.setPreferredSize(new Dimension(Width, Height));
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.red);
g.drawLine(0, OffsetY, Width, OffsetY);
g.drawLine(0, OffsetY+Height, Width, OffsetY+Height);
if (Links)
{
g.drawLine(0, OffsetY, 0, OffsetY+Height);
}
else
{
g.drawLine(Width-1, OffsetY, Width-1, OffsetY+Height);
}
}
}
Java:
public class Kreis extends Form
{
int Width = 50, Height = 20;
public Kreis()
{
this.setPreferredSize(new Dimension(Width, Height));
System.out.println("Kreis: "+Width+"x"+Height);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawLine(0, Height / 2, Width, Height / 2);
g.fillOval(Width / 2 - 5, Height / 2 - 5, 10, 10);
}
}
Java:
public class Quadrat extends Form
{
int Width = 50, Height = 20;
public Quadrat()
{
this.setPreferredSize(new Dimension(Width, Height));
System.out.println("Quadrat: "+Width+"x"+Height);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawLine(0, Height / 2, Width, Height / 2);
g.fillRect(Width / 2 - 5, Height / 2 - 5, 10, 10);
}
}