2014-11-28 5 views
9

Ich erstelle Bildergalerie mit javafx. Ich habe viele Dinge im Internet diesbezüglich gefunden, aber keine passende Hilfe für dieses Problem bekommen. Ich muss eine Bildergalerie wie Picasa Viewer erstellen. Alle Bilder befinden sich in der Miniaturansicht in meiner Bildansicht und danach, wenn ich das Bild auswähle, das sich im Popup-Viewer befindet. Ich habe dafür Code gemacht, aber ich habe keine richtige Ausgabe bekommen. Alle Bilder aus dem Ordner werden von den gleichen Koordinaten neu gezeichnet. Unten ist mein Code und Ausgabe.Arbeiten am Erstellen von Bildergalerie in JavaFX. nicht in der Lage, Bild richtig anzuzeigen

@Override 
public void initialize(URL url, ResourceBundle rb) { 

    String path = "/home/ubuntu/eclipse with liferay/Desktop/imagetest/"; 

    File folder = new File(path); 
    File[] listOfFiles = folder.listFiles(); 

    for (final File file : listOfFiles) { 

      ImageView imageView; 
      imageView = createImageView(file); 
      imagecontainer.getChildren().addAll(imageView); 

    } 

} 
private ImageView createImageView(final File imageFile) throws FileNotFoundException, FileNotFoundException, FileNotFoundException, FileNotFoundException { 
    // DEFAULT_THUMBNAIL_WIDTH is a constant you need to define 
    // The last two arguments are: preserveRatio, and use smooth (slower) resizing 

    ImageView imageView = null; 
    try { 

     final Image image; 

     image = new Image(new FileInputStream(imageFile), DEFAULT_THUMBNAIL_WIDTH, 0, true, true); 
     imageView = new ImageView(image); 

    } catch (FileNotFoundException ex) { 
     Logger.getLogger(GalleryController.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    return imageView; 

} 

} 

output

Bitte helfen Sie mir mein Problem zu lösen. Ich möchte Bilder einzeln als Miniaturansicht anzeigen.

+0

Was ist 'imageContainer'? –

+0

@James_D: Bildcontainer ist FXML-Bereich. –

+0

@James_D: Entschuldigung Mann Ich vergesse zu erwähnen über die Scheibe: | –

Antwort

22

Sie müssen ein TilePane erstellen und ImageView's hinzufügen. Sie können bei Bedarf ein ScrollPane verwenden. Ein vollständiges Beispiel mit Doppelklick zum Erstellen einer Vollbildvorschau ist unten gezeigt. Sie können natürlich tun notwendigen Änderungen für eine FXML Schaffung :)

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 

import javafx.application.Application; 
import javafx.event.EventHandler; 
import javafx.geometry.Insets; 
import javafx.scene.Scene; 
import javafx.scene.control.ScrollPane; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import javafx.scene.input.MouseButton; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.TilePane; 
import javafx.scene.paint.Color; 
import javafx.stage.Screen; 
import javafx.stage.Stage; 

public class ImageGallery extends Application { 

    Stage stage; 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     stage = primaryStage; 
     ScrollPane root = new ScrollPane(); 
     TilePane tile = new TilePane(); 
     root.setStyle("-fx-background-color: DAE6F3;"); 
     tile.setPadding(new Insets(15, 15, 15, 15)); 
     tile.setHgap(15); 

     String path = "/home/ubuntu/eclipse with liferay/Desktop/imagetest/"; 

     File folder = new File(path); 
     File[] listOfFiles = folder.listFiles(); 

     for (final File file : listOfFiles) { 
       ImageView imageView; 
       imageView = createImageView(file); 
       tile.getChildren().addAll(imageView); 
     } 


     root.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); // Horizontal 
     root.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED); // Vertical scroll bar 
     root.setFitToWidth(true); 
     root.setContent(tile); 

     primaryStage.setWidth(Screen.getPrimary().getVisualBounds().getWidth()); 
     primaryStage.setHeight(Screen.getPrimary().getVisualBounds() 
       .getHeight()); 
     Scene scene = new Scene(root); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 

    } 

    private ImageView createImageView(final File imageFile) { 
     // DEFAULT_THUMBNAIL_WIDTH is a constant you need to define 
     // The last two arguments are: preserveRatio, and use smooth (slower) 
     // resizing 

     ImageView imageView = null; 
     try { 
      final Image image = new Image(new FileInputStream(imageFile), 150, 0, true, 
        true); 
      imageView = new ImageView(image); 
      imageView.setFitWidth(150); 
      imageView.setOnMouseClicked(new EventHandler<MouseEvent>() { 

       @Override 
       public void handle(MouseEvent mouseEvent) { 

        if(mouseEvent.getButton().equals(MouseButton.PRIMARY)){ 

         if(mouseEvent.getClickCount() == 2){ 
          try { 
           BorderPane borderPane = new BorderPane(); 
           ImageView imageView = new ImageView(); 
           Image image = new Image(new FileInputStream(imageFile)); 
           imageView.setImage(image); 
           imageView.setStyle("-fx-background-color: BLACK"); 
           imageView.setFitHeight(stage.getHeight() - 10); 
           imageView.setPreserveRatio(true); 
           imageView.setSmooth(true); 
           imageView.setCache(true); 
           borderPane.setCenter(imageView); 
           borderPane.setStyle("-fx-background-color: BLACK"); 
           Stage newStage = new Stage(); 
           newStage.setWidth(stage.getWidth()); 
           newStage.setHeight(stage.getHeight()); 
           newStage.setTitle(imageFile.getName()); 
           Scene scene = new Scene(borderPane,Color.BLACK); 
           newStage.setScene(scene); 
           newStage.show(); 
          } catch (FileNotFoundException e) { 
           e.printStackTrace(); 
          } 

         } 
        } 
       } 
      }); 
     } catch (FileNotFoundException ex) { 
      ex.printStackTrace(); 
     } 
     return imageView; 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 

} 

Ausgabe

enter image description here

Dies funktioniert gut, wenn Sie die Größe des Fensters, so dass die ScrollPane sichtbar, falls erforderlich.

+0

hervorragender Mann !! Vielen dank für Deine Hilfe. Genau das, was ich brauche !! sehr geschätzt !! –

+0

hallo .. hier in der Galerie .. nur PNG-Dateien werden angezeigt .. jpg funktioniert nicht ..? –

+0

Alle im obigen Screenshot verwendeten Bilder haben das Format 'jpg'. Wenn etwas nicht funktioniert, erstellen Sie bitte eine neue Frage mit [MCVE] (http://stackoverflow.com/help/mcve) und verknüpfen Sie diese Frage/Antwort darin. – ItachiUchiha