2014-09-02 45 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

相关问题