2016-02-20 4 views
0

Bonne nuit, je fais une application en utilisant javaFx avec certains partenaires; l'idée est que ça va être utilisé sous Windows et Linux. Nous avons fait quelques tests et vu que l'application affiche différents dans les deux systèmes d'exploitation.JavaFX DPI awarness

Nous utilisons Scène Builder. Je me demande si quelqu'un a rencontré un problème similaire et comment vous le résoudre (j'ai déjà lu d'autres post similaire mais aucun d'entre eux m'a aidé).

Voici comment il affiche sur Windows: enter image description here

Et voici comment il affiche sur Linux: enter image description here

Ceci est juste un exemple, comme il arrive avec toutes les formes. S'il y a quelqu'un là-bas qui pourrait aider, nous l'apprécierions vraiment !!

Je fis la fonction suivante pour appeler les formes:

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); 
    } 
} 

Voici le FXML du formulaire tel que demandé:

<?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

Il semble que différentes polices modifient la taille des boutons. Pouvez-vous poster le code? –

+0

J'ai posté le code que j'utilise pour appeler tous les formulaires, tout ce dont vous avez besoin Im heureux de l'afficher, n'est pas tant d'espace que c'est l'espacement entre les différents contrôles de la forme. –

+0

Jetez un oeil à l'application en utilisant [ScenicView] (http://fxexperience.com/scenic-view/) sur les deux OS pour comprendre quelle est la différence réelle. Le code pertinent est dans les fichiers FXML et CSS que vous devez ensuite ajouter à la publication. – hotzst

Répondre

0

Merci à tous pour commenter, le problème était la famille de la police et la taille que Linux n'a pas les reconnaître, ce que je faisais était télécharger un fichier de police et l'ajouter à la proyect, créez un fichier * .css avec:

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

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

et puis l'ajouter à la scène avant de l'ouvrir avec:

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

Même si le problème est résolu et qu'il a l'air bien, il y a toujours le petit détail que lorsque je suis en train de concevoir je dois enlever les espaces à droite et en bas parce que Windows en ajoute plus, ça ne semble pas arriver sous Linux, il y a une différence d'affichage.

1

Les fenêtres par défaut la police est différente de la valeur par défaut Linux polices que vous en cours d'exécution. Pour vérifier s'il vous plaît définir un objet prédéfini et voir

dans votre TableCell

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