gpt4 book ai didi

JavaFx SwingNode - 随机显示黑色、背景或组件

转载 作者:行者123 更新时间:2023-11-30 06:52:21 43 4
gpt4 key购买 nike

JavaFx 的 SwingNode 显示它在 Java 1.8.0_102-b14 中包含的组件时遇到问题。我不确定这个问题是由于我的 Java 版本太旧,当前(如果我的是当前)Java 版本中的错误,还是我做错了某些 SwingNode 进程。我知道这个问题之前已经被报告过 JavaFX and SwingNode - partial black Window所以我真的在寻找有关我的 Java 版本的反馈。

这段代码通常会错误地显示“button1”,如黑色或背景色,直到鼠标悬停在它上面或被点击。这对我来说不是一个理想的解决方法,因为我的项目在 Fx 项目中使用了更复杂的 Swing 面板,不幸的是,纯 Fx 不是一个选项。

import javafx.application.Application;
import javafx.embed.swing.SwingNode;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

import javax.swing.JButton;

public class Test extends Application {

@Override
public void start(Stage stage) {
final SwingNode swingNode1 = new SwingNode();
final SwingNode swingNode2 = new SwingNode();

swingNode2.setContent(new JButton("Click me!"+2));
swingNode1.setContent(new JButton("Click me!"+1));

BorderPane pane = new BorderPane();
pane.setLeft(swingNode1);
pane.setRight(swingNode2);

stage.setScene(new Scene(pane, 200, 50));
stage.show();
}

public static void main(String[] args) {
launch(args);
}
}

在创建此 sssce 时,我发现在设置右侧 SwingNode 中的内容之前先设置左侧 SwingNode 中的内容可以更正此简单代码的问题,但不适用于我的大型项目。所以我猜这是内存泄漏,但我无法从我的机器上判断出来。

有人可以测试这段代码,看看他们是否会得到类似的结果吗?

编辑:感谢您的快速反馈,请不要关注按钮,因为它们只是演示我的问题的工具。奇怪的功能以与其他对象而不是按钮相同的方式起作用。

最佳答案

必须在 AWT 事件调度线程上创建和显示 Swing 组件(参见 Swing's threading policy)。 Application.start() 方法是 invoked on the FX Application Thread .

因此你需要

public class Test extends Application {

@Override
public void start(Stage stage) {
final SwingNode swingNode1 = new SwingNode();
final SwingNode swingNode2 = new SwingNode();

SwingUtilities.invokeLater(() -> {
swingNode2.setContent(new JButton("Click me!"+2));
swingNode1.setContent(new JButton("Click me!"+1));
});

BorderPane pane = new BorderPane();
pane.setLeft(swingNode1);
pane.setRight(swingNode2);

stage.setScene(new Scene(pane, 200, 50));
stage.show();
}

public static void main(String[] args) {
launch(args);
}
}

关于JavaFx SwingNode - 随机显示黑色、背景或组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39003599/

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