Mehrere geometrische Objekte in JPanel zeichnen

Status
Nicht offen für weitere Antworten.

al3x

Mitglied
Hi,
ich programmiere derzeit 4 gewinnt und habe nun für jede Spalte ein JPanel. Darin möchte ich jetzt bis zu 10 Kreise zeichnen. 1 Kreis klappt schon aber bei wiederholtem zeichnen wird der erste überschrieben. Wie kann ich mehrere Kreise speichern? bis jetzt:

Das ist eines der bis zu 10Jpanels (JPanel-Array)

[HIGHLIGHT="Java"]class Spalten_Panels extends JPanel
{
int s;
int spalten;
int zeilen;
int y;
//Graphics2D g2d;
Graphics gp;
int width = 0;
int height = 0;
Graphics2D g2d[];
int contentS = 0;

public Spalten_Panels(int s, int spalten, int zeilen, Spielfeld sf)
{
g2d = new Graphics2D[zeilen];
this.y = 0;
this.s = s;
this.spalten = spalten;
this.zeilen = zeilen;
this.setBounds(s*62+10, 75, 60, 60*zeilen+zeilen*2);
this.setBackground(SystemColor.controlShadow);
this.setVisible(true);
sf.add(this);
}

//Das hier ist die Hauptmethode. Repaint führt immer das aus, was hier drin behandelt wird, weswegen man mit den anderen Methoden nur die
//Variablen bei fillOval(....) ändern kann.
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g2d[contentS] = (Graphics2D) g;
g2d[contentS].fillOval(0, y, width, height);

}

public void draw(int y, int contentS)
{
this.contentS = contentS;
System.out.println(contentS);
width = 60;
height = 60;
this.y = y;
}

public void move(int i)
{
y += i;
}

public int getRecentY()
{
return y;
}
}[/HIGHLIGHT]

Gruß Alex
 
Zuletzt bearbeitet von einem Moderator:
De Kommentar bei der paintComponent ist schon fast(!) richtig, aber ... warum zur Höl... speicherst du dir die Graphicss..se.? :autsch: Mach' das weg.
Wenn du mehrere Ovals zeichen willst, musst du mehrere Ovals (d.h. Punkte+Radius) speichern, und nicht mehrere Graphicsse...
 
Hey Marco, wie genau meinst du das denn? Programmiere noch nicht allzu lange mit Swing/AWT, vllt seit maximal 2 Monaten.

Gruß Alex
 
ZUM BEISPIEL (!) sowas speichern wie
Code:
private List<Point> ovalPoints = new ArrayList<Point>();
Da dann die Oval-Positionen reinlegen
Code:
ovalPoints.add(new Point(100,100));
ovalPoints.add(new Point(100,150));
...
und in der paintComponent-Methode alle Ovals zeichnen. NUR in das übergebene Graphics-Objekt:
Code:
protected void paintComponent(Graphics g)
{
    super.paintComponent(g);
    for (Point point : ovalPoints)
    {
        g.fillOval(point.x, point.y, width, height);
    }
}
 
@al3x:

Erklär uns doch mal was Du vorhast. Der bisherige Verlauf diese Threads weckt bei mir gerade den Verdacht, daß Du vielleicht gar keine 10 JPanels benötigst. 😱
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben