Java 快照整个表视图

Java 快照整个表视图,java,javafx,tableview,Java,Javafx,Tableview,我目前正在尝试使用快照从TableView创建图像,而快照仅捕获屏幕上可见的TableView。我尝试过混用快照首选项视口,但没用。如有任何建议或解决办法,将不胜感激 编辑:我现在还尝试创建一个与TableView宽度和高度相同的新窗格,添加TableView,并对其进行快照,但结果为空。我一直在玩这个。创建一个新窗格并将其添加到场景中,会显示表视图的所有列,但不是所有行 下面是拍摄快照的代码 WritableImage image = null; //Get the node TableVi

我目前正在尝试使用快照从
TableView
创建图像,而快照仅捕获屏幕上可见的TableView。我尝试过混用
快照首选项
视口,但没用。如有任何建议或解决办法,将不胜感激

编辑:我现在还尝试创建一个与
TableView
宽度和高度相同的新窗格,添加
TableView
,并对其进行快照,但结果为空。我一直在玩这个。创建一个新窗格并将其添加到场景中,会显示
表视图的所有列,但不是所有行

下面是拍摄快照的代码

WritableImage image = null;

//Get the node
TableView<ObservableList<ObjectProperty<Item>>>pattern =  mainApp.getPVController().getPattern();

//Create rectangle to define viewport
Rectangle2D rect = new Rectangle2D(0, 0, pattern.getWidth(), pattern.getHeight());

//Define snapshot parameters    
SnapshotParameters params = new SnapshotParameters();
params.setViewport(rect);

//Take the snapshot
image = pattern.snapshot(params, image);
 GridPane gPane = new GridPane();
     gPane.setSnapToPixel(true);
     gPane.setStyle("-fx-background-color: DARKGREY; -fx-padding: 1;"
                    +"-fx-hgap: 1; -fx-vgap: 1;");

     for(int i=0; i<mainApp.getItemList().size(); i++){ // rows
         for(int j=0; j<mainApp.getItemList().get(0).size(); j++){ //columns

             Color color = mainApp.getItemList().get(i).get(j).getValue().getDisplayColor();
                int r = (int) (color.getRed() * 255);
                int g = (int) (color.getGreen() * 255);
                int b = (int) (color.getBlue() * 255);

             Rectangle rect = new Rectangle(5,5);

             rect.setStyle("-fx-fill: rgb(" + r + "," + g + "," + b + ");");
             gPane.add(rect, j, i);
         }
     }
        Scene scene = new Scene(gPane);
        WritableImage image = gPane.snapshot(new SnapshotParameters(), null);
writeableimage=null;
//获取节点
TableViewpattern=mainApp.getPVController().getPattern();
//创建矩形以定义视口
Rectangle2D rect=新的Rectangle2D(0,0,pattern.getWidth(),pattern.getHeight());
//定义快照参数
SnapshotParameters params=新的SnapshotParameters();
参数setViewport(矩形);
//拍快照
image=pattern.snapshot(参数,图像);

好的,我想出了一个解决办法。我使用了
TableView
的底层数据,并制作了一个
GridPane
来表示底层数据,效果很好。我的数据是用颜色表示的,这就是您将在下面看到的。您当然可以对其他数据类型执行此操作

现在我在改变网格线的阴影和宽度时遇到了麻烦,但这是另一个问题。下面是创建网格窗格的代码

WritableImage image = null;

//Get the node
TableView<ObservableList<ObjectProperty<Item>>>pattern =  mainApp.getPVController().getPattern();

//Create rectangle to define viewport
Rectangle2D rect = new Rectangle2D(0, 0, pattern.getWidth(), pattern.getHeight());

//Define snapshot parameters    
SnapshotParameters params = new SnapshotParameters();
params.setViewport(rect);

//Take the snapshot
image = pattern.snapshot(params, image);
 GridPane gPane = new GridPane();
     gPane.setSnapToPixel(true);
     gPane.setStyle("-fx-background-color: DARKGREY; -fx-padding: 1;"
                    +"-fx-hgap: 1; -fx-vgap: 1;");

     for(int i=0; i<mainApp.getItemList().size(); i++){ // rows
         for(int j=0; j<mainApp.getItemList().get(0).size(); j++){ //columns

             Color color = mainApp.getItemList().get(i).get(j).getValue().getDisplayColor();
                int r = (int) (color.getRed() * 255);
                int g = (int) (color.getGreen() * 255);
                int b = (int) (color.getBlue() * 255);

             Rectangle rect = new Rectangle(5,5);

             rect.setStyle("-fx-fill: rgb(" + r + "," + g + "," + b + ");");
             gPane.add(rect, j, i);
         }
     }
        Scene scene = new Scene(gPane);
        WritableImage image = gPane.snapshot(new SnapshotParameters(), null);
GridPane gPane=new GridPane();
gPane.setSnapToPixel(真);
gPane.setStyle(“-fx背景色:暗灰色;-fx填充:1;”
+“-fx hgap:1;-fx vgap:1;”;
对于(int i=0;i