Шрифты Javafx Text и Label выглядят по-разному - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь сделать мой текстовый объект похожим на другие блоки, которые используют Label для отображения некоторого текста.Я не могу использовать Label, потому что мне нужна функция Text для настройки ширины переноса.Но я вижу прямую разницу между окончательно отображаемым текстом.Как вы можете видеть на скриншоте, шрифт Text выглядит немного смелее, чем у Label.Как мне сделать так, чтобы мой текст выглядел так же, как метка?

Я думал, что это только моя проблема с таблицей стилей, но я вижу ту же разницу в SceneBuilder.

Предварительный просмотр внутриscenebuilder

1 Ответ

0 голосов
/ 31 мая 2018

В таблице стилей по умолчанию цвет текста в метке установлен на искомый цвет, называемый -fx-text-background-color (это равно цвету текста переднего плана, несмотря на то, чтоимя), которое, в свою очередь, зависит от искомого цвета -fx-background (отсюда и название ...).Значение -fx-background обычно наследуется от родителя;идея здесь в том, что он использует цвет, который контрастирует с фоном.Значение определяется как

-fx-text-background-color: ladder(
    -fx-background,
    -fx-light-text-color 45%,
    -fx-dark-text-color  46%,
    -fx-dark-text-color  59%,
    -fx-mid-text-color   60%
);

Таким образом, вы можете сделать текст похожим на метку, используя тот же CSS-цвет для поиска для свойства -fx-fill текста.Вот очень быстрая и грязная демонстрация:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class TextColor extends Application {

    @Override
    public void start(Stage primaryStage) {
        Label plainLabel = new Label("A plain label");
        Text styledText = new Text("Styled text");
        styledText.setStyle("-fx-fill: -fx-text-background-color;");
        Text plainText = new Text("A plain text");

        VBox root = new VBox(10, plainLabel, styledText, plainText);
        root.setPadding(new Insets(10));
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

, которая дает

enter image description here

Это также заставляет Text реагировать соответствующим образомк изменениям на заднем плане.Если вы добавите

root.setStyle("-fx-background: black;");

, то стилизованный текст (и метка по умолчанию) будет отвечать:

enter image description here

Обратите внимание, чтодля вашего варианта использования для Text комбинация

label.setPrefWidth(...);
label.setWrapText(true);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...