2016-02-20 92 views
0

晚安,我正在使用JavaFX与一些合作伙伴的应用程序;这个想法是它将被用于Windows和Linux。我们一直在做一些测试,并发现应用程序在两个操作系统中都显示不同。JavaFX的DPI awarness

我们正在使用场景Builder.I'm想,如果有人happend碰到类似的问题,以及如何解决它(我已经阅读过其他类似的帖子,但没有他们的帮助我)。

这是如何显示在Windows上: enter image description here

,这是它如何显示在Linux上: enter image description here

这只是一个例子,因为它与一切形式的发生。如果有人可以帮助我们,我们将非常感激!

我做下一个函数调用的形式:

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> 
+0

它只是看起来像不同的字体改变按钮的大小。你能发布代码吗? –

+0

我张贴,我用它来调用所有的形式,任何你需要我很高兴发布它的代码,是不是这么大的空间,因为它的形式是不同的控件之间的间距。 –

+0

以使用[ScenicView(http://fxexperience.com/scenic-view/)两个操作系统上找出实际的区别是什么一看应用。相关代码位于FXML和CSS文件中,然后添加到该文章中。 – hotzst

回答

0

谢谢大家非常多的评论,问题是字体系列和Linux的不承认他们的大小,我所做的就是下载一个字体文件,并把它添加到proyect,创建一个* .css文件:

scene.getStylesheets().add(getClass().getResource("/stock/css.css").toExternalForm()); 
:随着对外开放之前

@font-face { 
     src: url("Roboto-Regular.ttf"); 
    } 

    .root { 
     -fx-font-family: "Roboto Regular"; 
     -fx-font-size: 12px; 
    } 

然后将其添加到现场

即使问题得到解决,它看起来很大,仍然有微小的细节时,即时通讯设计我必须拿出空格右侧和底部,因为Windows添加更多的它,似乎并没有被发生在Linux上,所以显示有所不同。

1

Windows默认的字体是从Linux默认的字体,你是不同的正在运行。要检查此,请在你的TableCell设置预先定义的对象,看看

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