java - Swing 嵌入 JavaFX 面板,日语输入面板中的文本字段,预测文本弹出窗口具有不同的外观
问题描述
请参阅以下类似于我们的用例的代码:
public class SwingEmbedJavaFXExample extends JDialog {
public static void main(String[] args) {
new SwingEmbedJavaFXExample().setJFX();
}
private void setJFX() {
JFXPanel jfxPanel = new JFXPanel();
GridPane grid = createGridWithJavaFXLabelTextFieldAndAButton();
getContentPane().add(jfxPanel);
// initialize FX with JFXPanel which has scene get by gridPane
//embedding jfxPanel to JDialog
Platform.runLater(() -> initFX(jfxPanel, grid));
this.setVisible(true);
}
private void initFX(JFXPanel jfxPanel, GridPane grid) {
Scene scene = new Scene(grid, 300, 275);
jfxPanel.setScene(scene);
}
@NotNull
private GridPane createGridWithJavaFXLabelTextFieldAndAButton() {
GridPane grid = new GridPane();
grid.setAlignment(Pos.CENTER);
Label label = new Label("Label: ");
grid.add(label, 0, 1);
TextField textField = new TextField();
textField.setId("PropertyNameTextfield");
textField.setPromptText("promptText");
grid.add(textField, 1, 1);
grid.add(new Button("Hit me!"), 2, 1);
return grid;
}
}
问题看起来像这样IMAGE: Swing Embed Java Fx Problem with Japanese input
问题是带有“ENTER”符号的额外文本字段和预测框,并且预测框显示在远离 UI 的地方
注意: 我们不能使用纯 Javafx 或纯 Swing。
解决方案
问题在于 Platform.runLater 发生的事情是它不会以不同的方式对待 JavaFX Runnable,这就是它与 window-text-suggestion-service 不同步的原因。
解决方案是使用 PlatformImpl.runAndWait,它实际上不会等待运行 JavaFX Runnable 来运行,这会导致与 window-text-suggestion 服务的良好同步。
口头禅:JavaFX 应用程序始终使用 PlatformImpl.runAndWait 而不是 Platform.runLater。
推荐阅读
- database - 更改 AWS RDS 数据库实例上的安全组
- c++ - Boost:多索引:如何遍历匹配非唯一有序索引的所有结果?
- java - 我可以为 JFormattedText 定义长度吗?
- 3d - 如何在 Godot 引擎中拖动 KinematicBody (3D)
- ubuntu - 如何从 CMake 访问 Beast on Boost 1.66 和 1.67
- laravel-5 - Laravel:表单操作和路由错误。[Route: ] [URI: {id}] 缺少必需的参数
- php - 需要对 varchar2 列进行排序
- swift - 封口的主体这么长,如何让它更短
- performance - 所有的自动化测试软件都慢吗?Selenium 的速度问题
- html - Div 不会触摸屏幕的边缘