css – 如何在JavaFX标签的文本周围绘制边框?

为了提高文本的可读性,建议我们概述标签控件的文本.我知道你可以描边文字形状,但我们选择了标签.我忘记了原因,但我认为这是因为标签可以为我们做一些文字形状不能做的事情.

如何围绕标签的字母和单词绘制轮廓或边框?

我尝试了-fx-stroke但是没有用,-fx-border只是在节点周围画了一个边框.反正有没有让这项工作?

最佳答案
使用CSS指定标签文本的大纲.

/** file: outline.css (place in same directory as OutlinedLabelText) */    
.label {
    -fx-font-size: 50px;
}

.outline.label .text {
    -fx-fill: lightseagreen;
    -fx-stroke: firebrick;
    -fx-stroke-width: 2px;
}

样品用法:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class OutlinedLabelText extends Application {
    @Override
    public void start(Stage stage) throws Exception {
        Label label = new Label("Outlined");
        label.getStyleClass().add("outline");

        StackPane layout = new StackPane(label);
        layout.setPadding(new Insets(10));

        Scene scene = new Scene(layout, Color.PALEGREEN);
        scene.getStylesheets().addAll(getClass().getResource(
                "outline.css"
        ).toExternalForm());

        stage.setScene(scene);
        stage.show();
    }

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

上面的示例使用未记录的选择器从标签中选择样式的文本.通常,作为包含子节点的父节点的复杂节点的JavaFX CSS documentation包括标题为“子结构”的文档部分中的子节点的节.对于Labeled,未提供子结构,但如果是,则会显示如下所示:

Substructure

  • text — the text node within the Labeled

我使用场景图内省工具(如ScenicView)找到了.text选择器.对于Java 9,JavaFX实现在类构造函数中为以下类设置样式类:com.sun.javafx.scene.control.LabeledText,它调用getStyleClass().addAll(“text”);.所以无论如何,这就是有些神奇地出现的子组件类.text的起源.

转载注明原文:css – 如何在JavaFX标签的文本周围绘制边框? - 代码日志