2014-12-12 127 views
3

为了增强我们文本的可读性,有人建议我们概述标签控件的文本。我知道你可以对文字形状进行描边,但我们使用了标签。我忘记了为什么,但我认为这是因为有一个标签可以为我们做一个文本形状不能。如何在JavaFX标签的文本周围绘制边框?

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

我试过-fx-stroke但是没有起作用,-fx-border刚刚在节点周围画了一个边框。无论如何做这项工作?

回答

8

使用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; 
} 

outline

示例用法:

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的来源。

+0

非常感谢。 – Will 2014-12-13 03:59:52