2014-11-28 28 views
9

javafx'i kullanarak resim galerisi oluşturuyorum. Bununla ilgili internette birçok şey buldum, ancak bu konuyla ilgili herhangi bir yardım alamadım. Picasa görüntüleyici gibi bir resim galerisi oluşturmalıyım. Tüm görüntüler, resim görünümümde küçük resim görünümündedir ve bundan sonra açılır görüntüleyicideki görüntüyü seçtiğimde. Bunun için bir kod yaptım ama doğru çıktı almadım. Klasördeki tüm görüntüler aynı koordinatlardan yeniden çizilir. Aşağıda kodum ve çıkışım var. JavaFX'te Resim Galerisi Oluşturma Üzerine Çalışmak. Resim düzgün görüntülenemiyor

output

@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; 

} 

} 

nazikçe bana sorunu çözmek için yardımcı olur. Resimleri küçük resim olarak tek tek görüntülemek istiyorum.

+0

ImageContainer nedir? –

+0

@James_D: görüntü kapsayıcı, FXML Bölmesi'dir. –

+0

@James_D: Üzgünüm panama bahsetmeyi unuttum: | –

cevap

22

Bir TilePane oluşturup ImageView öğelerini buna eklemeniz gerekir. Gerekirse bir ScrollPane'e sahip olabilirsiniz. Tam ekran önizleme oluşturmak için çift tıklama ile tam bir örnek aşağıda gösterilmiştir. Elbette bir FXML oluşturmak için gerekli değişiklikleri :)

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); 
    } 

} 

Çıktı

enter image description here

gerekirse sen, ScrollPane görünür hale Pencere yeniden boyutlandırmak, bu harika çalışıyor yapabilirsiniz.

+0

süper adam! Yardımın için çok teşekkürler. Tam olarak ihtiyacım olan şey! oldukça memnun olarak !! –

+0

merhaba .. galeride .. sadece png dosyaları görüntüleniyor .. jpg çalışmıyor ..? –

+0

Yukarıdaki ekran görüntüsünde kullanılan tüm resimler "jpg" biçimindedir. Eğer çalışmayan bir şey varsa, lütfen [MCVE] (http://stackoverflow.com/help/mcve) ile yeni bir soru oluşturun ve bu soruyu/cevabı ona bağlayın. – ItachiUchiha