首页 > 代码库 > JavaFX2 -- 控件 -- TwoColorLabel -- 可以显示两种颜色的Label

JavaFX2 -- 控件 -- TwoColorLabel -- 可以显示两种颜色的Label

TwoColorLabel -- 可以显示两种颜色的Label

你可能知道在Swing中通过为一个JLabel设置HTML文本,即可显示复杂多样的文字效果。但是很遗憾,在JavaFX2+中,Label不具备这个特性。在JavaFX2版本中,HTMLEditor和WebView可以解析HTML文本,但是使用这两个组件来显示很小的文本,是个累赘。在JavaFX8中,新增了一个TextFlow容器,可以向其中添加不同效果的Text,该容器会自动的对Text进行换行布局等,以及显示不同效果的文本。

 

本将介绍一个为在JavaFX2版本中使用的显示两种颜色文本控件(局限性很大,只能分前后显示两种颜色,可以自动换行)

 

代码如下:

import javafx.event.EventHandler;import javafx.scene.control.TextArea;import javafx.scene.input.MouseEvent;import javafx.scene.paint.Color;/** * 可以显示两种颜色的Label * * @since 2014-7-23 10:08:28 * @author Alan */public class TwoColorLabel extends TextArea {    private static final Color DEFAULT_FIRST_COLOR = Color.RED;    private static final Color DEFAULT_SECOND_COLOR = Color.rgb(76, 120, 174);    public TwoColorLabel(final String firstText, final String secondText) {        this(firstText, secondText, DEFAULT_FIRST_COLOR, DEFAULT_SECOND_COLOR);    }    public TwoColorLabel(final String firstText, final String secondText, final Color firstColor, final Color secondColor) {        setText(firstText + secondText);        setEditable(false);        addEventFilter(MouseEvent.ANY, new EventHandler<MouseEvent>() {            @Override            public void handle(MouseEvent t) {                t.consume();            }        });        setWrapText(true);        setStyle("-fx-text-fill:rgb(" + (int) (firstColor.getRed() * 255) + "," + (int) (firstColor.getGreen() * 255) + "," + (int) (firstColor.getBlue() * 255) + ");"                + "-fx-highlight-fill: white;\n"                + "-fx-highlight-text-fill:  rgb(" + (int) (secondColor.getRed() * 255) + "," + (int) (secondColor.getGreen() * 255) + "," + (int) (secondColor.getBlue() * 255) + ");"                + "-fx-background-color: transparent;");        selectRange(firstText.length(), getText().length());    }}

 

复制去Google翻译翻译结果
TwoColorLabel