Hallo zusammen,
ich zeichne auf der Graphics eines JPanels viele nebeneinander liegende Objekte, was soweit auch funktioniert. Die entsprechenden Parameter werden aus einem Array entnommen, welches dieser Klasse übergeben wurde. Jetzt möchte ich aber von der main-class aus in einer for-Schleife für mehrere (unterschiedliche) Arrays solche Graphic-JPanels erstellen und in das Main-JPanel einfügen. Jedes Array wird korrekt übergeben, jedoch im Endeffekt immer nur das letzte Array mehrmals hintereinander gezeichnet. Wo liegt mein Fehler? Bin noch Anfänger und dankbar für jeden Tip. ???:L
Aufruf in der Main-Class:
Ist jetzt vielleicht etwas viel Code geworden, aber dann findet man den Fehler bestimmt einfacher...
ich zeichne auf der Graphics eines JPanels viele nebeneinander liegende Objekte, was soweit auch funktioniert. Die entsprechenden Parameter werden aus einem Array entnommen, welches dieser Klasse übergeben wurde. Jetzt möchte ich aber von der main-class aus in einer for-Schleife für mehrere (unterschiedliche) Arrays solche Graphic-JPanels erstellen und in das Main-JPanel einfügen. Jedes Array wird korrekt übergeben, jedoch im Endeffekt immer nur das letzte Array mehrmals hintereinander gezeichnet. Wo liegt mein Fehler? Bin noch Anfänger und dankbar für jeden Tip. ???:L
Java:
public class Sphere extends JPanel{
.....
public Sphere(int array[]){
setPreferredSize(new Dimension(WIDTH,HEIGHT));
setOpaque(false);
this.array = array;
startX = 10;
}
private void createSphere(Graphics2D g2d, int i){
if (array[i] == 0){
diameter = MIN_DIAMETER;
color1 = WHITE;
color2 = GRAY;
}
else {
diameter = MIN_DIAMETER + array[i]*FACTOR;
color1 = BLUE1;
color2 = BLUE2;
}
startY = HEIGHT/2-(int)diameter/2;
Point2D start = new Point2D.Double(startX, startY);
Point2D end = new Point2D.Double(startX+diameter/2, startY+diameter/2);
Ellipse2D.Double sphere = new Ellipse2D.Double(startX, startY, diameter, diameter);
GradientPaint gp = new GradientPaint(start, color1, end, color2);
g2d.setPaint(gp);
g2d.fill(sphere);
startX = startX + (int)diameter;
}
protected void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
RenderingHints renderHints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHints(renderHints);
for (int i=0; i < array.length; i++){
createSphere(g2d, i);
}
startX = 10;
g2d.dispose();
}
}
Aufruf in der Main-Class:
Java:
private void start(){
quantity = 3;
for (int i=0; i<quantity; i++){
JPanel panel = new JPanel();
panel.setOpaque(false);
panel.setLayout(new FlowLayout(FlowLayout.LEFT));
JPanel cat_panel = addCategory(category[i]);
panel.add(cat_panel);
JPanel vector_panel = addSphericalVector(i);
panel.add(vector_panel);
this.add(panel);
}
}
private JPanel addSphericalVector(int row) {
int tempArray [] = new int[length]; // umkopieren der Matrix-Zeile in ein einzelnes Array
for (int i=0; i<length; i++){
tempArray[i] = matrix[row][i];
}
JPanel panel = new Sphere(tempArray);
return panel;
}
Ist jetzt vielleicht etwas viel Code geworden, aber dann findet man den Fehler bestimmt einfacher...