javaFX学习笔记之在使用文字(Text)(转载)

原文地址:DOC-03-39 在JavaFX中使用文字(Text) | JavaFX中文资料

导读

JavaFX程序中的图形内容由许多对象组成,它们都被组织到了一个名为scene graph的树形结构之中。scene graph中的每个元素被称为一个node。node可以处理不同类型的内容,也包括文本。node可以被变换或者被添加动画效果。你也可以为node应用各种各样的特效。使用各种node类型所共有的特性可以让你提供复杂的文本内容,它们可以满足现代富互联网应用(Rich Internet Application,RIA)的需要。

JavaFX的SDK提供了javafx.scene.text.Text类,它被用来显示文本。Text类继承自Node类,因此你可以对Text应用特效、动画和变形,就像对其它各种node一样。由于Node类继承自Shape类,所以你可以像给其他任何shape一样为Text设置笔画或者填充模式

添加文本

要在你的程序中添加Text对象

Text t = new Text();
t.setText("This is a text sample"); 

Text t = new Text("This is a text sample"); 

1

Text t = new Text (10, 20, "This is a text sample");

例中的构造方法在前两个参数指定的坐标处创建了一个text对象。 

设置文本字体和颜色

在添加Text的时候,你也可以为其设置一些属性。如果要设置字体,你可以使用一个javafx.scene.text.Font类的实例。Font.font()方法让你可以指定字体名称和大小。你也也可以设置文本颜色

t.setText("This is a text sample");

t.setFont(Font.font ("Verdana", 20));

t.setFill(Color.RED);

除此之外,你可能想要使用系统字体,其字体类型一般取决于平台类型。你可以通过调用Font.getDefault()方法来达到这个目的。

在实际的代码中,Oracle建议你使用CSS来设置样式。例如,如果要为你的Text对象应用线性渐变填充效果,则可以把所需的样式规则添加到你的CSS文件中

2

3

4

5

6

#fancytext {

    -fx-font: 100px Tahoma;

    -fx-fill: linear-gradient(from 0% 0% to 100% 200%, repeat, aqua 0%, red 50%);

    -fx-stroke: black;

    -fx-stroke-width: 1;

}

 在你的代码中可以创建Text对象并应用CSS样式

设置文本为粗体或斜体

如果要将文本的字体变粗,则可以使用font方法,传入FontWeight常量参数,如例

Java

1

t.setFont(Font.font("Verdana", FontWeight.BOLD, 70));

如果要显示斜体字,则可以使用FontPosture常量 

t.setFont(Font.font("Verdana", FontPosture.ITALIC, 20)); 

使用自定义字体

如果你需要使用某个可能未在其它电脑上安装的特殊字体,则可以在你的JavaFX程序中包含一个TrueType 字体(.ttf)文件或者OpenType(.otf)字体文件。

要添加TrueType或者OpenType字体作为自定义字体,可以按照如下步骤:

· 在你的工程文件夹下创建resources/fonts文件夹。

· 将字体文件拷贝到上面创建的fonts文件夹下。

· 在代码中加载自定义字体,如例所示。

1

text.setFont(Font.loadFont("file:resources/fonts/isadoracyr.ttf", 120));

这段代码为Text提供了如图所示的字体。

设置LCD文本支持

LCD(liquid crystal display)文本是一种抗锯齿文本,它利用了LCD显示器的特性来显示更加光滑流畅的文本。你可以在Text Node上使用LCD文本的特性,如例所示。

1

text.setFontSmoothingType(FontSmoothingType.LCD));

除此之外,你也可以通过下面的CSS语法在一个.css文件中提供这样的设置,如例所示。

CSS

1

.text { -fx-font-smoothing-type: lcd; }

富文本和双向排列支持

你可以创建多个Text Node并使用TextFlow布局面板把它们放在一起。TextFlow对象采用了在其中的每个Text对象的文本和字体,但是会忽略其子节点的wrapping width、x和y属性。TextFlow对象使用它自己的宽度和文本对齐方式来决定每个子节点的位置。例展示了在一个TextFlow面板中的3个拥有不同字体和文本的Text Node

String family = "Helvetica";

double size = 50;

TextFlow textFlow = new TextFlow();

textFlow.setLayoutX(40);

textFlow.setLayoutY(40);

Text text1 = new Text("Hello ");

text1.setFont(Font.font(family, size));

text1.setFill(Color.RED);

Text text2 = new Text("Bold");

text2.setFill(Color.ORANGE);

text2.setFont(Font.font(family, FontWeight.BOLD, size));

Text text3 = new Text(" World");

text3.setFill(Color.GREEN);

text3.setFont(Font.font(family, FontPosture.ITALIC, size));

textFlow.getChildren().addAll(text1, text2, text3);

Group group = new Group(textFlow);

Scene scene = new Scene(group, 500, 150, Color.WHITE);

stage.setTitle("Hello Rich Text");

stage.setScene(scene);

stage.show();

 

你可以通过调用如下方法来改变TextFlow的默认排列方向:

textFlow.setNodeOrientation(NodeOrientation.RIGHT_TO_LEFT);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值