当前位置: 首页 > 知识库问答 >
问题:

JavaFX:如果节点边界设置为最大值,如何拍摄节点快照?

白翰海
2023-03-14

我试图拍摄一个自定义窗格的快照(我将它放在BorderPane的中心),但是每次我得到的都是一个空白的PNG图像。我用一个按钮尝试了相同的代码,它的快照被成功地获取并保存。我检查了边界,注意到窗格的边界有最大值(父边界和局部边界):

[minX:-9.9999997952E10, minY:-9.9999997952E10, minZ:0.0, width:1.99999995904E11, height:1.99999995904E11, depth:0.0, maxX:9.9999997952E10, maxY:9.9999997952E10, maxZ:0.0]

我认为这样做的原因是窗格的布局设置得如此,因此它填充了BorderPane的中心空间。我还在文档中发现了以下内容,这支持了我的怀疑:

窗格的最大宽度和高度不受限制,这表明父窗格的大小可能会超出其首选大小,以填充分配给它的任何空间。

这是拍摄快照的相关代码:

final WritableImage SNAPSHOT = mNodeToExport.snapshot(new SnapshotParameters(), null);
final File          FILE     = new File(mPathTextField.getText());

try {
    ImageIO.write(SwingFXUtils.fromFXImage(SNAPSHOT, null), "png", FILE);
    return FILE;
} catch (IOException exception) {
    System.err.println("Error while exporting image of logicboard: " + exception.getMessage());
    return null;
}

创建后快照的内容是:调试图像,我认为这很奇怪,因为它的宽度和高度值应该远远大于1。

我尝试拍摄我尝试导出的窗格的子节点的快照,它适用于具有“非无限”边界的子节点,但为具有“无限”边界的子节点html" target="_blank">返回相同的图像。

如果因为“无限”的边界值而没有正确地拍摄快照,如何临时更改快照的窗格边界?如果界限不是问题,那么问题会是什么呢?

共有1个答案

劳法
2023-03-14

显然,您可以传递一个矩形2D作为快照的视口。因此,以下操作完成了这项工作:

SnapshotParameters params = new SnapshotParameters();
params.setViewport(mLogicBoardView.getViewPort());
final WritableImage SNAPSHOT = mLogicBoardView.snapshot(params, null);
final File          FILE     = new File(mPathTextField.getText());

try {
    ImageIO.write(SwingFXUtils.fromFXImage(SNAPSHOT, null), "png", FILE);
    return FILE;
} catch (IOException exception) {
    System.err.println("Error while exporting image of logicboard: " + exception.getMessage());
    return null;
}

其中我在getViewPort()函数中手动计算视口。

 类似资料:
  • 我已经用FXML创建了一个布局,它由一个带有sideMenu的BorderPane和一个用于其他内容的innerBorderPane组成... 但是,由于我刚刚开始使用JavaFX中的FXML,所以我只需要知道如何做下一件事... custom.FXML(这是主要的FXML布局) sideMenu.FXML(这是sideMenu FXML布局) java(这是sideMenu JavaFX控制器)

  • 我很惊讶,节点的原始大小显然是在中控制的。我们有两个愚蠢的方法和仅此而已。 事件在哪里,可观察的属性在哪里,所有这些进步的东西在哪里?被遗忘了?欢迎视窗3.1应用编程接口? 我的印象是不是错了?请修理我。 如何绑定节点边界?如何同步调整一个节点的大小和另一个节点的大小?如何将一个节点放入另一个节点?如何使内部节点推送外部节点的大小? 如何将一些动作与节点调整大小联系起来?

  • 我正在尝试手动对齐JavaFX窗格上的节点,但似乎无法获得节点的实际外部边界。 我不知道如何更好地解释这个问题,而不是展示我创建的以下示例来演示它: 此窗口由以下代码生成: 如何获得节点的实际外部边界?

  • 不知道如何表达这个问题。如果不清楚请原谅。 如下图所示,我想拖动一个节点(圆圈)跨过父节点(窗格),一旦节点跨过父节点的边界,外部的部分就会出现在相反的一端。

  • 前言 为了配置kubernetes中的traefik ingress的高可用,对于kubernetes集群以外只暴露一个访问入口,需要使用keepalived排除单点问题。本文参考了kube-keepalived-vip,但并没有使用容器方式安装,而是直接在node节点上安装。 定义 首先解释下什么叫边缘节点(Edge Node),所谓的边缘节点即集群内部用来向集群外暴露服务能力的节点,集群外部的