- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题:我有需要使用 JavaFX 舞台显示的 Swing 内容。 Swing 内容需要包装在 ScrollPane
中,以便在调整舞台大小时保持正常的 Swing 大小。
预期行为:首次显示舞台时,需要自动调整其大小以适应 Swing 内容(即无需滚动即可查看)。
实际行为:要么舞台部分显示 Swing 内容(如果舞台在 节点被填充之前显示),要么根本不显示(如果舞台是在节点被填充后显示)。
如果在添加 Swing 节点内容之前显示阶段:
如果在添加 Swing 节点内容后 显示舞台,然后调整大小:
代码: 这可能包括一些冗余语句,作为我各种尝试的一部分。
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
,控制起来会比较麻烦。这就是可能发生的事情:
ScrollPane
是根节点,所以Scene
需要告诉ScrollPane
它可以给多少空间滚动面板
。Scene
告诉 ScrollPane
它可以使用任意数量的空间(Scene
将尝试在初始布局期间自行调整大小)。 ScrollPane
需要告诉其子级进行布局。由于 ScrollPane
可以在需要时产生滚动条,它只会告诉 children 使用它想要的空间。SwingNode
,在布局阶段没有内容渲染,它会告诉ScrollPane
它需要使用X空间,这是某种默认。ScrollPane
将自身调整为该大小。ScrollPane
告诉 Scene
它需要那么多空间。Scene
和 Stage
相应地设置它们的大小。Stage
变得可见,所有内容开始呈现。SwingNode
开始渲染 Swing 组件。SwingNode
请求。SwingNode
从 ScrollPane
请求空间。ScrollPane
创建滚动条并继续在小空间中呈现其子项。至于解决方案,我没有找到任何像样的解决方案。一种方法是在某处设置固定大小(Scrollpane
、Scene
或 SwingNode
)。另一种方法是将滚动移动到 Swing 中。
关于使用 SwingNodes 时 JavaFX 舞台大小不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49166342/
编辑:我在下面留下了我原来的问题。如果您希望使用 AnchorFX 源代码和我下面的代码测试问题,您应该能够重现问题。在其他一些情况下也会发生,并且类似于以下两个问题中的问题:Resize Swing
当启动 JavaFX 应用程序(嵌入了 Swing 代码)作为 Webstart 时,会发生以下错误: java.lang.ExceptionInInitializerError at com
我正在尝试将 Swing 内容嵌入到更大的 JavaFX 应用程序中,但是我无法让嵌入的 JPanel 具有透明背景。 JPanel 仅绘制其部分区域。我希望绿色“显示出来”,即删除下图中的浅灰色背景
我有一个 JavaFX 应用程序,它通过 SwingNode 显示 Swing 图。由于 swing 组件的编写方式以及我不愿意重构它,每次用户需要更新数据时,我都会创建一个新的 swing plot
我用 JavaFx 编写了一个简单的应用程序,想在其中使用 swingNode,所以我在更改节点的大小或位置时遇到问题 public class SwingFx extends Application
假设我已经这样做了 - SwingNode deviceView = new SwingNode(); JDesktopPane desktop = new JDesktopPane(); // Ad
JavaFx 的 SwingNode 显示它在 Java 1.8.0_102-b14 中包含的组件时遇到问题。我不确定这个问题是由于我的 Java 版本太旧,当前(如果我的是当前)Java 版本中的错
当我在面板(JFXPanel 中的 GridPane)中有多个 SwingNode 时,我注意到性能极度下降。如果只有一个 SwingNode,这似乎不会发生。 我意识到混合使用 Swing 和 Ja
我一直在使用这段代码尝试 JavaFX8 中的 SwingNode。问题是当窗口出现时我无法单击按钮,直到我调整了窗口大小。移动它不起作用。我需要最大化它或用鼠标调整它的大小以使按钮响应。 我意识到这
我用 javaFx 编写了一个应用程序,想将 JButton 添加到 SwingNode 中的 Pane 中这是我的 fxml Controller public class Controller i
问题:我有需要使用 JavaFX 舞台显示的 Swing 内容。 Swing 内容需要包装在 ScrollPane 中,以便在调整舞台大小时保持正常的 Swing 大小。 预期行为:首次显示舞台时,需
我已使用 SwingNode 将 JFileChooser 集成到 JavaFX 应用程序中。该对话框显示并且可用,但我不确定如何从中获取所选文件。 感谢您的帮助。 @FXML public void
我一直在尝试使用 import javafx.embed.swing.SwingNode 因为我想在我的项目中使用 SwingNode,但是出现了错误“无法解析”。 我的库中有一个JavaFX SDK
SwingNode 在使用 Spring Boot、OpenJFX 和 Maven 的应用程序中导致链接错误 我通读了有关此问题的帖子,尝试按照他们的建议进行操作(请参阅下面的代码),但无法解决我的问
我对使用 JavaFX 还很陌生,我希望将 JPanel 添加到 JavaFX Pane 中。我目前拥有的代码可以工作,但是面板非常小。我希望能够调整它的大小,使其适合 JavaFX Pane 。 代
概述 在 JavaFX 应用程序中使用 FlyingSaucer,出于各种原因避免使用 WebView: 不提供对其滚动条的直接 API 访问以实现同步行为; 捆绑 JavaScript,这对我的用例
FXMLController初始化方法: @FXML private VBox vbContainer; MediaPlayerVLC m_mediaPlayer; public void initi
我正在构建一个 Java FX 音乐应用程序,我有一个 Java FX Pane ,其中包含一个包含 JComponent 的 SwingNode,我希望能够隐藏该组件的顶部和底部,只显示中间部分。
我有以下代码: private void launchSingleRecordWindow() { SwingNode swingNode = new SwingNode(); Mai
如何在 JavaFX8 中调整 SwingNode 中的 Swing 控件的大小? 有时,我在 SwingNode 中调整了控件的大小。但是 SwingNode 似乎反对这一点。 据说在resize(
我是一名优秀的程序员,十分优秀!