gpt4 book ai didi

使用 SwingNodes 时 JavaFX 舞台大小不一致

转载 作者:行者123 更新时间:2023-11-30 10:18:35 25 4
gpt4 key购买 nike

问题:我有需要使用 JavaFX 舞台显示的 Swing 内容。 Swing 内容需要包装在 ScrollPane 中,以便在调整舞台大小时保持正常的 Swing 大小。

预期行为:首次显示舞台时,需要自动调整其大小以适应 Swing 内容(即无需滚动即可查看)。

实际行为:要么舞台部分显示 Swing 内容(如果舞台在 节点被填充之前显示),要么根本不显示(如果舞台是在节点被填充后显示)。

如果在添加 Swing 节点内容之前显示阶段:

if stage is shown *before*

如果在添加 Swing 节点内容后 显示舞台,然后调整大小:

if stage is shown *after* and then resized

代码: 这可能包括一些冗余语句,作为我各种尝试的一部分。

public static void main(final String[] args) {
Platform.startup(() -> {});
Platform.runLater(() -> doSwingNodeTest());
}

protected static void doSwingNodeTest() {
final Stage stage = new Stage();
final ScrollPane root = new ScrollPane();
final Scene scene = new Scene(root);
final SwingNode node = new SwingNode();
stage.setScene(scene);
stage.show(); // Required here for any content to
//display without resizing.
stage.sizeToScene();

final JPanel j = new JPanel();
j.setLayout(new BorderLayout());
j.add(new JLabel("Some text"), BorderLayout.NORTH);
j.add(new JButton("Some button"), BorderLayout.CENTER);
j.add(new JButton("East button"), BorderLayout.EAST);

node.setContent(j);
j.revalidate();
node.autosize();

root.setContent(node);
stage.setOnShown(e -> {
j.doLayout();
stage.sizeToScene();
node.autosize();
root.autosize();
});
// stage.show(); // Causes an 0-sized window.
}

有人知道发生了什么以及如何解决这个问题吗?谢谢!

最佳答案

ScrollPane,加上SwingNode,控制起来会比较麻烦。这就是可能发生的事情:

  1. ScrollPane是根节点,所以Scene需要告诉ScrollPane它可以给多少空间滚动面板
  2. Scene 告诉 ScrollPane 它可以使用任意数量的空间(Scene 将尝试在初始布局期间自行调整大小)。
  3. ScrollPane 需要告诉其子级进行布局。由于 ScrollPane 可以在需要时产生滚动条,它只会告诉 children 使用它想要的空间。
  4. child ,也就是SwingNode,在布局阶段没有内容渲染,它会告诉ScrollPane它需要使用X空间,这是某种默认。
  5. ScrollPane 将自身调整为该大小。
  6. ScrollPane 告诉 Scene 它需要那么多空间。
  7. SceneStage 相应地设置它们的大小。
  8. Stage 变得可见,所有内容开始呈现。
  9. SwingNode 开始渲染 Swing 组件。
  10. Swing 组件需要更大的空间并向 SwingNode 请求。
  11. SwingNodeScrollPane 请求空间。
  12. ScrollPane 创建滚动条并继续在小空间中呈现其子项。

至于解决方案,我没有找到任何像样的解决方案。一种方法是在某处设置固定大小(ScrollpaneSceneSwingNode)。另一种方法是将滚动移动到 Swing 中。

关于使用 SwingNodes 时 JavaFX 舞台大小不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49166342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com