【发布时间】:2014-10-28 14:32:42
【问题描述】:
如果我将 Swing 嵌入到嵌入到 Swing 中的嵌入式 JavaFX 中,我确实会遇到控件焦点问题。
Swing - JavaFX - Swing
public EmbeddedTestWithFX() {
setSize(new Dimension(300, 300));
JTextArea textArea = new JTextArea();
textArea.setSize(new Dimension(150, 150));
JPanel container = new JPanel();
container.setLayout(null);
container.add(textArea);
JFXPanel jfxPanel = new JFXPanel();
Platform.runLater(() -> {
SwingNode swing = new SwingNode();
StackPane stack = new StackPane(swing);
Scene scene = new Scene(stack);
swing.setContent(container);
SwingUtilities.invokeLater(() -> jfxPanel.setScene(scene));
});
setContentPane(jfxPanel);
}
public static void main(String[] args) {
new EmbeddedTestWithFX().setVisible(true);
}
}
现在我可以看到 TextArea,但问题是,它没有获得焦点。 如果我在 TextArea 上注册一个 FocusListener,我会看到它在单击后成为焦点,但它会立即失去焦点。
但如果我使用:
-Djavafx.embed.singleThread=true
示例开始工作。我现在可以单击 TextArea,它拥有焦点,我可以输入文本。
我真的不使用VM参数,因为这不是官方支持的VM功能,因为它合并了Swing和JavaFX两个应用程序线程。你知道,我的例子在不使用标志的情况下是如何工作的吗?
【问题讨论】:
-
查看@kleopatra 提出的问题/答案
-
搜索 1 小时后没有找到任何东西 - 你有什么提示吗? @mKorbel
-
抱歉,我没有找到任何可以解决我问题的方法。你能给我一个关于我的代码示例的明确提示吗? @mKorbel
标签: java swing javafx migration