Javafx文本和标签字体看起来不同

时间:2018-05-31 13:19:22

标签: css javafx styles

我正在尝试使我的Text对象看起来像使用Label来显示一些文本的其他块。我不能使用Label因为我需要Text的功能来设置包装宽度。但我看到最终显示的文字之间的直接差异。从截图中可以看出Text的字体看起来比Label更大胆。如何设置文本样式以使其看起来像Label?

我认为这只是我的样式表问题,但我可以在SceneBuilder中看到相同的区别。

Preview inside scenebuilder

1 个答案:

答案 0 :(得分:1)

default style sheet中,标签中的文字颜色设置为名为-fx-text-background-color的查找颜色(此文本的前景色,尽管name),这又取决于查找颜色-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%
);

因此,您可以使用与文本-fx-fill属性相同的CSS查找颜色,使文本看起来像标签。这是一个非常快速和肮脏的演示:

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);

将使您能够控制标签的包装宽度,并且可能比您在此处建议的方法更自然地解决您尝试做的事情。