快照整个TableView

时间:2014-12-22 00:01:18

标签: java javafx tableview

我目前正在尝试使用快照从TableView创建图像,而快照只是抓取屏幕上可见的tableview。我曾尝试弄乱SnapshotPreferences视口,但这并没有帮助。任何建议或解决方法将不胜感激。

编辑:我现在还尝试创建一个宽度和高度与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);

1 个答案:

答案 0 :(得分:0)

好的,所以我想出了一个解决方法。我使用了TableView的基础数据,并创建了一个代表基础数据的GridPane,效果很好。我的数据用颜色表示,这就是您将在下面看到的内容。您当然可以使用其他数据类型执行此操作。

现在我遇到了改变阴影和宽度的网格线的问题 - 但这是另一个问题。创建GridPane的代码如下。

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