Guten Abend!
Ich habe ein (vorerst leeres) JPanel. Zur Laufzeit werden mehrere Objekte meiner Klasse "Blech" erstellt (welche von JComponent erbt), die ich dann auf diesem JPanel anzeigen lassen möchte.
Leider hab ich irgendwo noch ne Kleinigkeit übersehen, jedenfalls bleibt JPanel leer.
Hier erstmal "Blech":
Ich füge mehrere Bleche ins JPanel graphPanel mit der Funktion zeichneBleche. Unten hab ich erstmal Testsätze erstellt.
Wobei der Code da noch nicht durchpoliert ist, mir ist klar dass zb das b.setBounds() so noch sehr unschön ist, aber ich wollte erstmal die Grundlage haben und danach verbessern.
bleche ist eine globale ArrayList<Blech> Variable.
zeichneBleche() rufe ich nach dem Druck auf einen Button auf. Im Debugger sehe ich auch, dass die for-Schleife vernünftig durchlaufen wird, aber das Panel bleibt weiterhin leer.
Ich habe ein (vorerst leeres) JPanel. Zur Laufzeit werden mehrere Objekte meiner Klasse "Blech" erstellt (welche von JComponent erbt), die ich dann auf diesem JPanel anzeigen lassen möchte.
Leider hab ich irgendwo noch ne Kleinigkeit übersehen, jedenfalls bleibt JPanel leer.
Hier erstmal "Blech":
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.io.FileWriter;
import java.util.*;
import javax.swing.JComponent;
// Repräsentiert ein Blech,
// besteht aus Maßen fürs Blech und Liste von Formen
public class Blech extends JComponent
{
private ArrayList<Form> formen;
private float blechBreite;
private float blechLaenge;
public Blech(float breite, float laenge, ArrayList<Form> f)
{
formen = f;
blechBreite = breite;
blechLaenge = laenge;
}
// überschreibt die JComponent-Methode
public void paint(Graphics g)
{
drawBlech((Graphics2D) g, getBounds());
}
void drawBlech(Graphics2D g, Rectangle area)
{
g.setColor(Color.white);
g.fill(new Rectangle2D.Float((float)area.getX(), (float)area.getY(), blechBreite, blechLaenge));
g.setColor(Color.black);
for(int i = 0; i < formen.size(); i++)
{
// hier werden später die Formen aus formen einzeln aufgerufen und auf das Blech drübergemalt; vorerst zu vernachlässigen
}
}
}
Ich füge mehrere Bleche ins JPanel graphPanel mit der Funktion zeichneBleche. Unten hab ich erstmal Testsätze erstellt.
Java:
public void zeichneBleche()
{
int x = graphPanel.getX()+10;
int y = graphPanel.getY()+10;
// Test
float[] floats1 = {(float)0.5, 2, 4}; float[] floats2 = {3, 4, 5};
FormObjekt f1 = new FormObjekt(floats1, floats2, 1, 3, "Form1");
float[] floats3 = {0, 2, 4}; float[] floats4 = {3, 4, 5};
FormObjekt f2 = new FormObjekt(floats3, floats4, 1, 3, "Form2");
float[] floats5 = {(float)0.5, 2, 4}; float[] floats6 = {3, 4, 5};
FormObjekt f3 = new FormObjekt(floats5, floats6, 1, 3, "Form3");
ArrayList<FormObjekt> fl1 = new ArrayList<FormObjekt>();
fl1.add(f1);
fl1.add(f2);
fl1.add(f3);
Blech b1 = new Blech(20, 10, fl1);
FormObjekt f4 = new FormObjekt(floats1, floats2, 1, 3, "Form1");
FormObjekt f5 = new FormObjekt(floats3, floats4, 1, 3, "Form2");
FormObjekt f6 = new FormObjekt(floats5, floats6, 1, 3, "Form3");
ArrayList<FormObjekt> fl2 = new ArrayList<FormObjekt>();
fl2.add(f4);
fl2.add(f5);
fl2.add(f6);
Blech b2 = new Blech(20, 10, fl2);
bleche.add(b1);
bleche.add(b2);
// Test
for(int i = 0; i < bleche.size(); i++)
{
Blech b = bleche.get(i);
graphPanel.add(b);
b.setBounds(x,y,20,10);
graphPanel.revalidate();
graphPanel.repaint();
x = x + 20 + 10;
}
bleche ist eine globale ArrayList<Blech> Variable.
zeichneBleche() rufe ich nach dem Druck auf einen Button auf. Im Debugger sehe ich auch, dass die for-Schleife vernünftig durchlaufen wird, aber das Panel bleibt weiterhin leer.