Адаптируемый размер текста у Control JavaFX

289
10 февраля 2018, 23:59

Собственно уже n-ый день мучаюсь с размером шрифта. Вот ситуация: на обычный AnchorPane добавил обычную кнопку и поставил все якори по 30. Теперь, когда я буду изменять размер окна, размер кнопки будет меняться. Но вот размер шрифта не меняется! Попробовал уже следующие варианты.

  1. Привязал слушатель к размеру Control'a и в зависимости от значений высоты и ширины менял размер шрифта. Но тут проблемой оказалось то, что когда вы уменьшаете размер окна, шрифт уже стал определённого размера и не даёт уменьшится Control'y, а следовательно и самому себе и таким образом он становится неуменьшаемым.
  2. Дальше я попробовал использовать ScalableContentPane из JFXtras, но тут пробела с тем, что невозможно делать GUI в SceneBuilder, т.к. чтобы данный объект работал правильно нужно детей добавлять не на его, а на его ContentPane, который получается в коде так new ScalableContentPane().getContentPane, а ещё он странно изменял свой размер и смотрелось это так себе...

Такие дела... Жду ваших предложений и решений, если что-то непонятно - пишите, уточню. Вот на всякий случай код...

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
public class FontSample extends Application {
public static void main(String[] args) {
    launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
    AnchorPane anchorPane = new AnchorPane();
    anchorPane.setPrefSize(900, 700);
    Button button = new Button("MrButton");
    AnchorPane.setTopAnchor(button, 30.0);
    AnchorPane.setRightAnchor(button, 30.0);
    AnchorPane.setBottomAnchor(button, 30.0);
    AnchorPane.setLeftAnchor(button, 30.0);
    anchorPane.getChildren().add(button);
    primaryStage.setScene(new Scene(anchorPane));
    primaryStage.show();
}
}
Answer 1

В общем нашёл способ, который обходит проблему пункта 1. Вот такой код

    import javafx.application.Application;
    import javafx.beans.property.DoubleProperty;
    import javafx.beans.property.SimpleDoubleProperty;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.layout.AnchorPane;
    import javafx.scene.text.Font;
    import javafx.stage.Stage;
    public class FontSample extends Application {
    private DoubleProperty doubleProperty = new SimpleDoubleProperty(12);
    public static void main(String[] args) {
        launch(args);
    }
    @Override
    public void start(Stage primaryStage) throws Exception {
        AnchorPane anchorPane = new AnchorPane();
        anchorPane.setPrefSize(900, 700);
        Button button = new Button("MrButton");
        AnchorPane.setTopAnchor(button, 30.0);
        AnchorPane.setRightAnchor(button, 30.0);
        AnchorPane.setBottomAnchor(button, 30.0);
        AnchorPane.setLeftAnchor(button, 30.0);
        anchorPane.getChildren().add(button);
        button.layoutBoundsProperty().addListener((observable, oldValue, newValue) -> {
        button.setFont(Font.font(Math.sqrt(newValue.getHeight() * 10)));
    });

        primaryStage.setScene(new Scene(anchorPane));
        primaryStage.show();
    }
}

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

READ ALSO
Фон с помощью jlabel закрывает все кнопки

Фон с помощью jlabel закрывает все кнопки

Когда ставлю фон с помощью jlabel, все кнопки и поля становятся под фономКак это исправить можно?

219
JavaFX: Взаимодействие двух окон

JavaFX: Взаимодействие двух окон

Есть два окна, допустим при нажатии кнопки в окне1 вызывается окно2 и в контроллер окна2 должен передаться объект1 из окна1 После неких операций,...

281
Нужен пример java Child key derivation (CKD) functions

Нужен пример java Child key derivation (CKD) functions

Подскажите пожалуйста пример вычисления на java Child key derivation (CKD) functions для биткоинаОписание алгоритма здесь https://github

242
Способ отображения страницы Spring MVC

Способ отображения страницы Spring MVC

Добрый деньЗанялся изучением Spring MVC и задался соответствующим вопросом: какая технология в нынешнее время наиболее востребована и наиболее...

200