首页 > 解决方案 > 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。

标签: javaswingjavafx

解决方案


问题在于 Platform.runLater 发生的事情是它不会以不同的方式对待 JavaFX Runnable,这就是它与 window-text-suggestion-service 不同步的原因。

解决方案是使用 PlatformImpl.runAndWait,它实际上不会等待运行 JavaFX Runnable 来运行,这会导致与 window-text-suggestion 服务的良好同步。

口头禅:JavaFX 应用程序始终使用 PlatformImpl.runAndWait 而不是 Platform.runLater。


推荐阅读