JavaFX, как предотвратить изменение размера текста Label во время фокусировки ScrollPane? - PullRequest
0 голосов
/ 04 декабря 2018

Как мне остановить фокусировку ScrollPane от изменения размера текста моих ярлыков?

Я делаю копию этого калькулятора автокредита в JavaFX.

Почти все работает, как задумано

Пока фокус ScrollPane не сфокусируется , заголовок и текст на правой стороне будут изменены

Краткое описаниемакет

Итак, проблема в том, что размер текста моих ярлыков изменяется, когда ScrollPane получает фокус.Я попытался исправить это, настроив свойства ScrollPane, макеты, содержащиеся в ScrollPane, и сами метки.Я также искал, задавался ли подобный вопрос раньшеЯ пока ничего не нашел.

Спасибо

Редактировать:

Добавил некоторый код, я старался сделать его как можно более минимальным.Если вы сфокусируете TextField, весь текст Label будет иметь такой размер, как ожидалось.Если вы сфокусируете ScrollPane, большой синий текст будет уменьшаться в соответствии с меньшим черным текстом.Очевидно, в этом примере нет необходимости прокручивать, но он все еще показывает проблему, с которой я столкнулся в моем проекте, которая требует прокрутки.

package application;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextField;
import javafx.scene.control.ScrollPane.ScrollBarPolicy;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.stage.Stage;

public class Main extends Application
{
    public static void main(String[] args)
    {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage)
    {
        Stage stage = primaryStage;

        HBox myHBox = new HBox();

        Label smallerText = new Label("this is small\ntext");
        smallerText.setStyle("-fx-font-weight: bold");
        smallerText.setTextFill(Color.web("#000000"));
        smallerText.setFont(Font.font("Leelawadee UI", FontPosture.REGULAR, 12));

        Label biggerText = new Label("this is big\ntext");
        biggerText.setStyle("-fx-font-weight: bold");
        biggerText.setTextFill(Color.web("#005FBA"));
        biggerText.setFont(Font.font("Leelawadee UI", FontPosture.REGULAR, 24));

        TextField myTextField = new TextField();

        myHBox.getChildren().addAll(smallerText, biggerText);

        VBox myVBox = new VBox();
        myVBox.getChildren().addAll(myHBox, myTextField);

        ScrollPane myScrollPane = new ScrollPane(myVBox);
        myScrollPane.setHbarPolicy(ScrollBarPolicy.NEVER);
        myScrollPane.setVbarPolicy(ScrollBarPolicy.ALWAYS);

        Scene scene = new Scene(myScrollPane);
        stage.setScene(scene);
        stage.show();
    }

}

Снова отредактируйте:

Проблема была решена.Спасибо!:)

1 Ответ

0 голосов
/ 05 декабря 2018

Как и предполагалось, что-то влияет на реализацию CSS-файла по умолчанию.Вы должны обязательно поднять билет JIRA по этому поводу.

Но пока вы можете решить эту проблему, перенеся все ваши объявления стиля в файл css.И все работает, как и ожидалось.

Ниже я сделал то, что сделал.

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.ScrollPane.ScrollBarPolicy;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class FontResizeIssueOnFocus extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        Stage stage = primaryStage;
        HBox myHBox = new HBox();

        Label smallerText = new Label("this is small\ntext");
        smallerText.getStyleClass().add("smaller-text");

        Label biggerText = new Label("this is big\ntext");
        biggerText.getStyleClass().add("bigger-text");

        TextField myTextField = new TextField();
        myHBox.getChildren().addAll(smallerText, biggerText);

        VBox myVBox = new VBox();
        myVBox.getChildren().addAll(myHBox, myTextField);

        ScrollPane myScrollPane = new ScrollPane(myVBox);
        myScrollPane.setHbarPolicy(ScrollBarPolicy.NEVER);
        myScrollPane.setVbarPolicy(ScrollBarPolicy.ALWAYS);

        Scene scene = new Scene(myScrollPane);
        scene.getStylesheets().add(getClass().getResource("scrollpanefontissue.css").toString());
        stage.setScene(scene);
        stage.show();
    }
}

И в файле CSS ...

.smaller-text{
  -fx-font-weight:bold;
  -fx-text-fill:#000000;
  -fx-font-family: "Leelawadee UI";
  -fx-font-size:12px;
}
.bigger-text{
  -fx-font-weight:bold;
  -fx-text-fill:#005FBA;
  -fx-font-family: "Leelawadee UI";
  -fx-font-size:24px;
}

Альтернативно, если выне заинтересованы в реализации файла CSS, вы можете объявить с помощью встроенного CSS.Это также исправит вашу проблему.

Label smallerText = new Label("this is small\ntext");
smallerText.setStyle("-fx-font-weight: bold;-fx-text-fill:#000000;-fx-font-family:\"Leelawadee UI\";-fx-font-size:12px;");

Label biggerText = new Label("this is big\ntext");
biggerText.setStyle("-fx-font-weight: bold;-fx-text-fill:#005FBA;-fx-font-family:\"Leelawadee UI\";-fx-font-size:24px;");
...