我目前正在尝试使用快照从 TableView
创建图像,并且快照仅抓取屏幕上可见的表格 View 。我尝试过弄乱 SnapshotPreferences 视口(viewport),但这没有帮助。任何建议或解决方法将不胜感激。
编辑:我现在还尝试创建一个与 TableView
宽度和高度相同的新 Pane ,添加 TableView
并拍摄快照,但最终结果为空白。我继续玩这个。创建一个新 Pane 并将其添加到场景中将为我提供 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);
最佳答案
好的,所以我想出了一个解决方法。我使用了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);
关于java - 快照整个TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27595096/