2014-12-12 113 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

相關問題