我有一个Eclipse-RCP项目,需要在SWT部件/窗口中使用JavaFX控件和组件。我将这些控件包含在一个简单的部分中,该部分将JavaFX组件包装在FXCanvas中。但是,当我在启用了字体缩放的高DPI屏幕的计算机上运行该应用程序时,FXCanvas的内容将比SWT部件的内容更小(且更模糊)。还要注意,JavaFX警报(在纯JavaFX阶段,不在FX-Canvas内)甚至小于FXCanvas的内容。

java - 在SWT FXCanvas中嵌入JavaFX时解决DPI缩放-LMLPHP

为了进行比较,同一应用程序在正常DPI屏幕上运行,并且没有字体缩放如下:

java - 在SWT FXCanvas中嵌入JavaFX时解决DPI缩放-LMLPHP

我的FXCanvasPart代码如下:

public class FXCanvasPart {

    private FXCanvas fxCanvas;
    private Label label;
    private Button jfxButton;

    @PostConstruct
    public void postConstruct(final Composite parent) {

        fxCanvas = new FXCanvas(parent, SWT.NONE);
        final BorderPane root = new BorderPane();

        label = new Label("This is an FX Label.");
        root.setTop(label);

        jfxButton = new Button("This is an FX button.");
        root.setCenter(jfxButton);

        final Scene scene = new Scene(root);
        fxCanvas.setScene(scene);
    }
}


SWT部分同样简单:

public class SWTPart {

    private Label label;
    private Button button;

    @PostConstruct
    public void createComposite(Composite parent) {
        parent.setLayout(new GridLayout(1, false));

        label = new Label(parent, SWT.NULL);
        label.setText("This is an SWT text label.");

        button = new Button(parent, SWT.NONE);
        button.setText("This is an SWT button.");

    }
}


使用以下处理程序,通过应用程序的菜单项打开JavaFX对话框:

public class OpenDialogHandler {
    @Execute
    public void execute(Shell shell) {
        Alert alert = new Alert(AlertType.INFORMATION);
        alert.setTitle("A JavaFX dialog");
        alert.setHeaderText("Header text");
        alert.setContentText("This is a JavaFX Alert dialog.");
        alert.showAndWait();
    }
}


我上载了带有完整Eclipse项目的zip file,它说明了这个问题,如果可以更轻松地研究这个问题。

谁能帮助我了解正在发生的事情以及如何解决此问题?谢谢!

这两个示例都是在Windows 10上使用JDK 9.0.4运行的。顺便说一下,在具有高DPI屏幕的计算机上使用JDK 8时,FXCanvas文本较大,但纯FX对话框的大小正确:

java - 在SWT FXCanvas中嵌入JavaFX时解决DPI缩放-LMLPHP

最佳答案

这是一个已知的问题:
https://bugs.openjdk.java.net/browse/JDK-8191661

除非稍后再发布几个版本,否则不可能修复此问题。

09-28 07:42