2014-09-02 47 views
0

我需要在圖像滾動窗格之間進行空間分割。我將一個圖像視圖和一個按鈕添加到Vbox中。然後,將vbox添加到gridpane.gridpane添加到滾動窗格。但是, scrollpane變得過於擁擠。我使用gridpane.setPadding(),但沒有效果。 這裏是我的代碼:如何保持圖像在滾動窗格之間的空間

  File file = new File("D:\\SERVER\\Server Content\\Apps\\icons"); 
      File[] filelist1 = file.listFiles(); 
      ArrayList<File> filelist2 = new ArrayList<>(); 


      for (File file1 : filelist1) { 
       filelist2.add(file1); 

      } 
      btnar=new ArrayList<>(); 
      for (int i = 0; i < filelist2.size(); i++) { 
       downloadbtn=new Button("Download"); 
       btnar.add(downloadbtn); 
      } 


      System.out.println(filelist2.size()); 
      gridpane.setAlignment(Pos.CENTER); 
      gridpane.setPadding(new Insets(50, 50, 50, 50)); 

      gridpane.setHgap(50); 
      gridpane.setVgap(50); 


      ColumnConstraints columnConstraints = new ColumnConstraints(); 
      columnConstraints.setFillWidth(true); 
      columnConstraints.setHgrow(Priority.ALWAYS); 
      gridpane.getColumnConstraints().add(columnConstraints); 

      int imageCol = 0; 
      int imageRow = 0; 

      for (int i = 0; i < filelist2.size(); i++) { 
       System.out.println(filelist2.get(i).getName()); 
       image = new Image(filelist2.get(i).toURI().toString()); 

       pic = new ImageView(); 
       pic.setFitWidth(130); 
       pic.setFitHeight(130); 


       pic.setImage(image); 
       vb = new VBox(); 
       vb.getChildren().addAll(pic,btnar.get(i)); 

       gridpane.add(vb, imageCol, imageRow); 
       GridPane.setMargin(pic, new Insets(2,2,2,2)); 
       imageCol++; 

       // To check if all the 3 images of a row are completed 
       if (imageCol > 2) { 
        // Reset Column 
        imageCol = 0; 
        // Next Row 
        imageRow++; 

       } 
      } 

enter image description here

這裏」我的舞臺的樣子,當圖像被添加

回答

1

您的代碼看起來好像沒什麼問題等。我已經用充滿圖像的文件夾試過了您的代碼。我將GridPane包裝在ScrollPane上,併爲ScrollPane定義了一個大小。 ImageViews之間的空格是按照HGapVGap提供的。這是一張表示我的發現的圖片。

注意

如果您在使用GridPanesetHgap()ImageView之間尋找差距和setVgap()

setPadding()用於設置網格周圍的空白。你可以ofcourse使用兩者的混合,因爲我已經低於

Image to show the code is working

完成詳情請見MCVE支持你發現你的錯誤

import java.io.File; 
import java.util.ArrayList; 
import java.util.List; 

import javafx.application.Application; 
import javafx.geometry.Insets; 
import javafx.geometry.Pos; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.ScrollPane; 
import javafx.scene.control.ScrollPane.ScrollBarPolicy; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import javafx.scene.layout.ColumnConstraints; 
import javafx.scene.layout.GridPane; 
import javafx.scene.layout.Priority; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class LoadingImages extends Application { 


    @Override 
    public void start(Stage primaryStage) throws Exception { 

     ScrollPane scrollPane = new ScrollPane(); 
     GridPane gridpane = new GridPane(); 
     scrollPane.setHbarPolicy(ScrollBarPolicy.AS_NEEDED); 
     scrollPane.setVbarPolicy(ScrollBarPolicy.AS_NEEDED); 
     scrollPane.setPrefSize(500, 500); 
     scrollPane.setContent(gridpane); 
     Scene scene = new Scene(scrollPane); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 

     File file = new File("Path to folder with images"); 
     File[] filelist1 = file.listFiles(); 
     ArrayList<File> filelist2 = new ArrayList<>(); 


     for (File file1 : filelist1) { 
      filelist2.add(file1); 

     } 
     List btnar=new ArrayList<>(); 
     for (int i = 0; i < filelist2.size(); i++) { 
      Button downloadbtn=new Button("Download"); 
      btnar.add(downloadbtn); 
     } 


     System.out.println(filelist2.size()); 
     gridpane.setAlignment(Pos.CENTER); 
     gridpane.setPadding(new Insets(50, 50, 50, 50)); 

     gridpane.setHgap(50); 
     gridpane.setVgap(50); 


     ColumnConstraints columnConstraints = new ColumnConstraints(); 
     columnConstraints.setFillWidth(true); 
     columnConstraints.setHgrow(Priority.ALWAYS); 
     gridpane.getColumnConstraints().add(columnConstraints); 

     int imageCol = 0; 
     int imageRow = 0; 

     for (int i = 0; i < filelist2.size(); i++) { 
      System.out.println(filelist2.get(i).getName()); 
      Image image = new Image(filelist2.get(i).toURI().toString()); 

      ImageView pic = new ImageView(); 
      pic.setFitWidth(130); 
      pic.setFitHeight(130); 


      pic.setImage(image); 
      VBox vb = new VBox(); 
      vb.getChildren().addAll(pic,(Button)btnar.get(i)); 

      gridpane.add(vb, imageCol, imageRow); 
      GridPane.setMargin(pic, new Insets(2,2,2,2)); 
      imageCol++; 

      // To check if all the 3 images of a row are completed 
      if (imageCol > 2) { 
       // Reset Column 
       imageCol = 0; 
       // Next Row 
       imageRow++; 

      } 
     } 

    } 

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

效果真的不錯!。這是我剛剛使用場景構建器將gridpane放在scrollpane的頂部。相反,我創建了一個gridpane對象並使用了scrollPane.setContent(gridpane); – 2014-09-02 09:13:56

相關問題