【问题标题】:JavaFX DPI awarnessJavaFX DPI 意识
【发布时间】:2023-03-06 03:21:02
【问题描述】:

晚安,我正在与一些合作伙伴使用 javaFx 制作应用程序;这个想法是它将用于 Windows 和 Linux。我们一直在进行一些测试,发现应用程序在两个操作系统中的显示有所不同。

我们正在使用 Scene Builder。我想知道是否有人碰巧遇到了类似的问题以及您是如何解决的(我已经阅读过其他类似的帖子,但没有一个对我有帮助)。

这是它在 Windows 上的显示方式:

这就是它在 Linux 上的显示方式:

这只是一个示例,因为它适用于所有表单。如果有人可以提供帮助,我们将不胜感激!

我做了下一个函数来调用表单:

private void OpenForm(String form, String title) {
    try
    {
        FXMLLoader fxmlLoader1 = new FXMLLoader(getClass().getResource(form));
        Parent root;
        root = fxmlLoader1.load();
        Stage stage = new Stage();
        stage.setScene(new Scene(root));
        stage.setTitle(title);
        stage.setResizable(false);
        stage.show();

    }catch (Exception ex)
    {
        Msg(3,"Program error","It appears there's something wrong : ",ex.getMessage().toString());
        System.out.println(ex);
    }
}

这是所要求的表单的 FXML:

    <?xml version="1.0" encoding="UTF-8"?>
    <?import javafx.scene.control.Button?>
    <?import javafx.scene.control.TableColumn?>
    <?import javafx.scene.control.TableView?>
    <?import javafx.scene.layout.AnchorPane?>

    <AnchorPane prefHeight="346.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="GUI.Almacen.ClientesMod">
       <children>
       <TableView fx:id="tvClientes" layoutX="4.0" layoutY="6.0" prefHeight="310.0" prefWidth="638.0">
       <columns>
        <TableColumn fx:id="tcIdCliente" prefWidth="75.0" text="RacF de Cliente" />
      <TableColumn fx:id="tcNombre" prefWidth="75.0" text="Nombre" />
      <TableColumn fx:id="tcDivision" prefWidth="75.0" text="División" />
    </columns>
     <columnResizePolicy>
        <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
     </columnResizePolicy>
  </TableView>
  <Button fx:id="btnModificar" disable="true" layoutX="535.0" layoutY="320.0" mnemonicParsing="false" onAction="#abrirModificarCliente" text="Modificar Cliente" />
  <Button fx:id="btnAgregar" layoutX="432.0" layoutY="320.0" mnemonicParsing="false" onAction="#abrirAgregarCliente" text="Agregar Cliente" />
    </children>
    </AnchorPane>

【问题讨论】:

  • 看起来不同的字体正在改变按钮的大小。可以发一下代码吗?
  • 我发布了我用来调用所有表单的代码,无论您需要什么我很乐意发布它,与其说是空间,不如说是表单的不同控件之间的间距。
  • 查看两个操作系统上使用ScenicView 的应用程序,找出实际差异。相关代码位于 FXML 和 CSS 文件中,然后您应该将它们添加到帖子中。
  • 我的意思是布局代码。你能发布 FXML 吗?
  • 就是这样。不知道是布局还是windows管理器的问题,希望大家给点意见!

标签: java javafx screen-resolution dpi scenebuilder


【解决方案1】:

Windows 默认字体与您运行的 Linux 默认字体不同。要检查这一点,请设置一个预定义的对象并查看

在您的 TableCell 中

{
   setFont(Font.font(Font.getFontNames().get(4), size));
}

【讨论】:

    【解决方案2】:

    非常感谢大家的评论,问题是字体系列和大小,因为 Linux 无法识别它们,我所做的是下载字体文件并将其添加到项目中,创建一个 *.css 文件:

        @font-face {
             src: url("Roboto-Regular.ttf");
        }
    
        .root {
            -fx-font-family: "Roboto Regular";
            -fx-font-size: 12px;
         }
    

    然后在打开它之前将其添加到场景中:

    scene.getStylesheets().add(getClass().getResource("/stock/css.css").toExternalForm());
    

    即使问题已解决并且看起来很棒,但仍然存在一些微小的细节,当我在设计时我必须取出右侧和底部的空间,因为 Windows 添加了更多空间,这似乎没有发生在 Linux 上,因此显示有所不同。

    【讨论】:

      猜你喜欢
      • 2012-06-19
      • 1970-01-01
      • 2018-08-26
      • 2020-06-19
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多