我目前正在尝试使用快照从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);
答案 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);