Приложение JavaFX неправильно отображает текст кнопки - PullRequest
0 голосов
/ 18 марта 2019

Я создал свой проект Maven, используя IntelliJ в Linux, все работает нормально, но когда я выполняю тот же проект в Windows 10, текст в JFXButton s не отображается должным образом (половина текста отображается в большинстве кнопок).

Java 11.0.2, IntelliJ IDEA Ultimate Edition и SceneBuilder 11 для Java 11 используются в обеих системах.

Что странно для меня, это то, что он правильно отображает вSceneBuilder, но когда я его выполняю, он портит графический интерфейс.Он также не распознает ЛЮБЫЕ установленные шрифты (также пытался @ font-face в CSS получить шрифт .tff , но безуспешно).

В Linux (работает и Scene Builder) и Windows 10 (Scene Builder) я получаю:

this

И в Windows 10(работает), я получаю:

this

(или хуже при использовании большего размера шрифта)


Fxml Я используюдля этой сцены: (генерируется SceneBuilder)

<?xml version="1.0" encoding="UTF-8"?>

<?import com.jfoenix.controls.JFXButton?>
<?import com.jfoenix.controls.JFXTextField?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane fx:id="root" maxHeight="380.0" maxWidth="600.0" minHeight="380.0" minWidth="600.0" prefHeight="380.0" prefWidth="600.0" stylesheets="@../css/CloseInterruptStyle.css" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
    <children>
        <Label fx:id="mbyllNderprejTitle" layoutX="172.0" layoutY="14.0" text="Ndërprej Kontratën" />
        <Label alignment="CENTER_RIGHT" layoutX="125.0" layoutY="220.0" maxHeight="26.0" maxWidth="180.0" minHeight="26.0" minWidth="170.0" prefHeight="26.0" prefWidth="180.0" styleClass="fieldSize" text="Karburanti në dorëzim :" />
        <Label alignment="CENTER_RIGHT" layoutX="125.0" layoutY="255.0" maxHeight="26.0" maxWidth="180.0" minHeight="26.0" minWidth="170.0" prefHeight="26.0" prefWidth="180.0" styleClass="fieldSize" text="Kilometrat në dorëzim :" />
        <JFXTextField fx:id="karburantiTextField" alignment="CENTER" focusColor="#f8ea53" layoutX="307.0" layoutY="220.0" maxHeight="26.0" maxWidth="145.0" minHeight="26.0" minWidth="145.0" prefHeight="26.0" prefWidth="145.0" styleClass="fieldSize" />
        <JFXTextField fx:id="kilometraTextField" alignment="CENTER" focusColor="#f8ea53" layoutX="307.0" layoutY="255.0" maxHeight="26.0" maxWidth="145.0" minHeight="26.0" minWidth="145.0" prefHeight="26.0" prefWidth="145.0" styleClass="fieldSize" />
        <JFXButton fx:id="anulloButton" buttonType="RAISED" layoutX="185.0" layoutY="316.0" minHeight="31.0" onAction="#anulloButtonAction" prefHeight="31.0" prefWidth="111.0" text="Anullo" />
        <JFXButton fx:id="mbyllNderprejButton" buttonType="RAISED" layoutX="326.0" layoutY="316.0" minHeight="31.0" onAction="#mbyllNderprejButtonAction" prefHeight="31.0" prefWidth="111.0" text="Ndërprej" />
        <Label alignment="CENTER_RIGHT" layoutX="125.0" layoutY="80.0" maxHeight="26.0" maxWidth="180.0" minHeight="26.0" minWidth="170.0" prefHeight="26.0" prefWidth="180.0" styleClass="fieldSize" text="Kontrata me ID :" />
        <JFXTextField fx:id="kontractIdTextField" alignment="CENTER" editable="false" focusColor="#b93845" layoutX="307.0" layoutY="80.0" maxHeight="26.0" maxWidth="145.0" minHeight="26.0" minWidth="145.0" prefHeight="26.0" prefWidth="145.0" styleClass="fieldSize" unFocusColor="#b93845" />
        <Label alignment="CENTER_RIGHT" layoutX="125.0" layoutY="115.0" maxHeight="26.0" maxWidth="180.0" minHeight="26.0" minWidth="170.0" prefHeight="26.0" prefWidth="180.0" styleClass="fieldSize" text="Nga Klienti :" />
        <JFXTextField fx:id="klientiTextField" alignment="CENTER" editable="false" focusColor="#b93845" layoutX="307.0" layoutY="115.0" maxHeight="26.0" maxWidth="145.0" minHeight="26.0" minWidth="145.0" prefHeight="26.0" prefWidth="145.0" styleClass="fieldSize" unFocusColor="#b93845" />
      <Label alignment="CENTER_RIGHT" layoutX="125.0" layoutY="150.0" maxHeight="26.0" maxWidth="180.0" minHeight="26.0" minWidth="170.0" prefHeight="26.0" prefWidth="180.0" styleClass="fieldSize" text="Koha e dorezimit : " />
      <JFXTextField fx:id="kohaDorezimitTextField" alignment="CENTER" editable="false" focusColor="#b93845" layoutX="307.0" layoutY="150.0" maxHeight="26.0" maxWidth="145.0" minHeight="26.0" minWidth="145.0" prefHeight="26.0" prefWidth="145.0" styleClass="fieldSize" unFocusColor="#b93845" />
      <Label alignment="CENTER_RIGHT" layoutX="125.0" layoutY="185.0" maxHeight="26.0" maxWidth="180.0" minHeight="26.0" minWidth="170.0" prefHeight="26.0" prefWidth="180.0" styleClass="fieldSize" text="Diferenca e kohës :" />
      <JFXTextField fx:id="diferencaKohesTextField" alignment="CENTER" editable="false" focusColor="#b93845" layoutX="307.0" layoutY="185.0" maxHeight="26.0" maxWidth="145.0" minHeight="26.0" minWidth="145.0" prefHeight="26.0" prefWidth="145.0" styleClass="fieldSize" unFocusColor="#b93845" />
    </children>
</AnchorPane>

Редактировать: контроллер добавляется с использованием этого метода (почти для каждого fxml файла приложения):

//get parent from given fxml path, and sets it controller
    Parent getParentView(String fxmlPath, Object controller) {
        try {
            FXMLLoader loader = new FXMLLoader(getClass().getResource(fxmlPath));
            loader.setController(controller);
            return loader.load(); //this is added to a stage or inside another container
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

Стиль CSS, который я использовал в обоих случаях:

#root {
    -fx-background-color: linear-gradient(to right, #cb356b, #bd3f32);
}

#mbyllNderprejTitle {
    -fx-font-size: 32;
    -fx-text-fill: #F2CA00;
    -fx-font-family: "Kotta One";
}

.fieldSize {
    -fx-font-size: 15;
}

#anulloButton, #mbyllNderprejButton {
    -fx-border-radius: 10pt;
    -fx-background-radius: 10pt;
    -fx-font-size: 16;
}

.text-field {
    -fx-background-color: linear-gradient(to bottom, rgba(236, 240, 241, 0.03), rgba(236, 240, 241, 0.08));
    -fx-font-size: 14px;
}

#anulloButton {
    -fx-background-color: linear-gradient(to right, rgba(234, 215, 186, 0.36), rgba(234, 171, 135, 0.34));
}

#mbyllNderprejButton {
    -fx-background-color: linear-gradient(to right, rgba(230, 134, 1, 0.58), rgba(191, 19, 77, 0.53));
    -fx-text-fill: white;
}

Зависимости Maven:

<dependencies>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>11</version>
    </dependency>

    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-media</artifactId>
        <version>11</version>
        <classifier>win</classifier>
    </dependency>

    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-media</artifactId>
        <version>11</version>
        <classifier>mac</classifier>
    </dependency>

    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-media</artifactId>
        <version>11</version>
        <classifier>linux</classifier>
    </dependency>

    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-graphics</artifactId>
        <version>11</version>
        <classifier>win</classifier>
    </dependency>

    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-graphics</artifactId>
        <version>11</version>
        <classifier>mac</classifier>
    </dependency>

    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-graphics</artifactId>
        <version>11</version>
        <classifier>linux</classifier>
    </dependency>

    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>11</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.13</version>
    </dependency>

    <dependency>
        <groupId>org.controlsfx</groupId>
        <artifactId>controlsfx</artifactId>
        <version>9.0.0</version>
    </dependency>

    <dependency>
        <groupId>com.jfoenix</groupId>
        <artifactId>jfoenix</artifactId>
        <version>9.0.8</version>
    </dependency>

    <dependency>
        <groupId>io.github.typhon0</groupId>
        <artifactId>AnimateFX</artifactId>
        <version>1.2.1-SNAPSHOT</version>
    </dependency>

    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.10.1</version>
    </dependency>

    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.5.13</version>
    </dependency>

</dependencies>

Я пытался увеличить высоту кнопки (чтобы включить текст), но этотребуется, по крайней мере, 33px высота , чтобы почти включить 15-16px размер шрифта , который «портит» внешний вид приложения.

Для распознавания шрифтов я не делалпока не нашли решение.

Необходимо, чтобы это работало в Windows, потому что клиент использует Windows 10. Требуется ли другая зависимость или я что-то не так делаю?

1 Ответ

0 голосов
/ 19 марта 2019

Рендеринг текста в JFXButtons разрешается с помощью одного из следующих CSS-селекторов:

.button .text {
    -fx-font-size: 18;
}

.jfx-button .text {
    -fx-font-size: 18;
}

#buttonId .text {
    -fx-font-size: 18;
}

Разрешено распознавание шрифтов с использованием этой строки кода в методе start () для каждого внешнего шрифта:

@Override
public void start(Stage stage) throws Exception {
    //load all application external fonts
    javafx.scene.text.Font.loadFont(
         getClass().getResource("/fonts/KottaOne-Regular.ttf").toExternalForm(), 15f);
    //...
}  

Чем шрифты готовы к использованию во всех файлах CSS, используя:

.label {
     -fx-font-family: "Kotta One";
     -fx-font-size: 20;
}
...