2016-02-20 1 views
0

Спокойной ночи, я делаю приложение с помощью javaFx с некоторыми партнерами; идея заключается в том, что он будет использоваться в Windows и Linux. Мы проводили некоторые тесты и видели, что приложение отображает разные в обеих ОС.JavaFX DPI awarness

Мы используем Scene Builder. Мне интересно, сталкивался ли кто-нибудь с подобной проблемой и как вы ее решаете (я уже читал другую аналогичную запись, но никто из них не помог мне).

Это, как он отображается на 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 файл:

@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, поэтому есть разница в отображении.

1

окон по умолчанию шрифт отличается от значения по умолчанию Linux шрифта вы работает на. Чтобы проверить это, пожалуйста, установите заранее определенный объект и увидеть

в вашем TableCell

{ 
    setFont(Font.font(Font.getFontNames().get(4), size)); 
} 
Смежные вопросы