为了增强我们文本的可读性,有人建议我们概述标签控件的文本。我知道你可以对文字形状进行描边,但我们使用了标签。我忘记了为什么,但我认为这是因为有一个标签可以为我们做一个文本形状不能。如何在JavaFX标签的文本周围绘制边框?
我该如何着手围绕标签的字母和单词绘制轮廓或边框?
我试过-fx-stroke
但是没有起作用,-fx-border
刚刚在节点周围画了一个边框。无论如何做这项工作?
为了增强我们文本的可读性,有人建议我们概述标签控件的文本。我知道你可以对文字形状进行描边,但我们使用了标签。我忘记了为什么,但我认为这是因为有一个标签可以为我们做一个文本形状不能。如何在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,不提供子,但如果是这样,它会读一些象下面这样:
内的文本节点子结构
- 文本 - 标记
我发现.text
选择器使用场景图内省工具,如ScenicView。对于Java 9,JavaFX实现在类构造函数中为以下类设置代码中的样式类:com.sun.javafx.scene.control.LabeledText
,其中它调用getStyleClass().addAll("text");
。因此无论如何,这就是神奇般地出现的子组件类.text
的来源。
非常感谢。 – Will 2014-12-13 03:59:52