Los*_*ost 5 java debugging swing javafx
我在 JavaFx 的 SwingNode 显示 Java 1.8.0_102-b14 中包含的组件时遇到问题。我不确定这个问题是否是由于我的 Java 版本太旧、当前(如果我的是当前)Java 版本中的错误或我执行错误的某些 SwingNode 进程所致。我知道这个问题在JavaFX 和 SwingNode - 部分黑色窗口之前就已报告过,所以我真的在寻找有关我的 Java 版本的反馈。
此代码通常会错误地显示“button1”,如黑色或背景色,直到鼠标悬停在其上或单击它。这对我来说不是一个理想的解决方法,因为我的项目在 Fx 项目中使用了更复杂的摆动面板,不幸的是,纯 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);
}
}
Run Code Online (Sandbox Code Playgroud)
在创建此 sssce 时,我发现在设置右侧 SwingNode 中的内容之前设置左侧 SwingNode 中的内容可以纠正此简单代码的问题,但不能纠正我的较大项目。所以我猜测这是内存泄漏,但我无法从我的机器上看出。
有人可以测试这段代码并看看他们是否得到类似的结果吗?
编辑:感谢您的快速反馈,请不要关注按钮,因为它们只是演示我的问题的工具。这种奇怪的功能与其他对象(而不是按钮)的作用方式相同。
您必须在 AWT 事件调度线程上创建并显示 Swing 组件(请参阅Swing 的线程策略)。该Application.start()方法在 FX 应用程序线程上调用。
因此你需要
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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2709 次 |
| 最近记录: |