Images aus einem Array ausgeben

rudaar

Mitglied
Hallo,
ich habe eine Frage zu einem Problem in meinem Programm.
Und zwar will ich Bilder über eine For-Schleife in einem Array speichern und über einen ImageView ausgeben.
Wenn ich es über die For-Schleife mache zeigt es mir nur das letzte Bild an.
Wenn ich sie in einzeln in den Array eingebe, zeigt er mir alle an.
Jetzt stehe ich gerade auf dem Schlauch und weiß nicht wo mein Fehler liegt.
Kann mir von euch jemand weiterhelfen?
Schon mal danke im Voraus.

Hier der Code:

Java:
for(i =0 ; i<3; i++) {
               
                System.out.println(i);
                image = new Image[3];
                image[i] = new Image(getClass().getResourceAsStream( i + ".jpeg"));
                imageView = new ImageView[3];
                imageView[i]= new ImageView();
                imageView[i].setImage(image[i]);
               
            }
       
           
            image = new Image[3];
            imageView = new ImageView[3];
           
           
            image[0] = new Image(getClass().getResourceAsStream(0 + ".jpeg"));
            imageView[0]= new ImageView();
            imageView[0].setImage(image[0]);
           
            image[1] = new Image(getClass().getResourceAsStream(1 + ".jpeg"));
            imageView[1]= new ImageView();
            imageView[1].setImage(image[1]);
           
            image[2] = new Image(getClass().getResourceAsStream(2 + ".jpeg"));
            imageView[2]= new ImageView();
            imageView[2].setImage(image[2]);
           
           
           
            root.setCenter(imageView[0]);
            root.setLeft(imageView[1]);
            root.setRight(imageView[2]);
 
Na, lies dir nochmal genau durch was du in der Schleife machst...insbesondere so die Zeilen #4 und #6 sollten die eigentlich ins Auge springen.
 
Kurz beschrieben, erstellst du in deiner Schleife ein leeres Array. Dem fügst du an der ersten Position ein Image hinzu. Danach erzeugst du ein neues leeres Array, dem du an der zweiten Position ein Image hinzufügst. Das ursprüngliche Array fällt dem Garbage Collector zum Opfer. Das machst du dann noch ein drittes Mal.

Schau dir nebenbei mal die Konstruktoren von ImageView an: https://docs.oracle.com/javase/8/javafx/api/javafx/scene/image/ImageView.html#constructor.summary
Es gibt auch Einen, der das ImageView direkt mit Image erzeugt. Du kannst dir damit das Array von Images und den Aufruf von setImage() sparen.
 
Hey Robert und temi,
Vielen Dank für eure Hilfe.
Ich habe den Code jetzt aktualisiert und den Garbage Collector geleert.
Das Anlegen des Image Array und des ImageView Array habe ich jetzt vor die For-Schleife gepackt und in der For-Schleife werden die Positionen befüllt.
Siehe da es funktioniert so wie ich es wollte und mir gedacht habe.
Da stand ich aber voll auf dem Schlauch. Habe mich gewundert warum Position 0 und 1 leer waren und Position 3 das Bild angezeigt wurde. Jetzt ist es mir aber klar.

Java:
            image = new Image[3];
            imageView = new ImageView[3];
           
            for(i =0 ; i<3; i++) {
               
                System.out.println(i);
                //image = new Image[3];
                image[i] = new Image(getClass().getResourceAsStream( i + ".jpeg"));
                //imageView = new ImageView[3];
                imageView[i]= new ImageView();
                imageView[i].setImage(image[i]);
               
            }
       
            root.setCenter(imageView[0]);
            root.setLeft(imageView[1]);
            root.setRight(imageView[2]);

@temi
Meinst du mit der Methode zum Aufrufen einen ImageView ohne Images anzulegen, die Variante
ImageView imageView = new ImageView(new image)?

In meinem Fall würde es dann so aussehen:

Code:
ImageView imageView = new ImageView(new Image(getClass().getResourceAsStream( "0.jpeg")));
root.setBottom(imageView);

Diese Variante spart ja einige Zeilen Code und machen ihn dadurch etwas übersichtlicher.
Vielen Dank für den Tipp.
 

Zurück
Oben