JavaFX- 2.1 JavaFX控件:Label

10 篇文章 0 订阅
10 篇文章 4 订阅

Label

经过前面几节内容,我们已经学会了如何创建一个工程,后续章节均不再重复介绍工程创建。

本小节将带大家学习如何使用JavaFX API中位于javafx.scene.control包中Label类去显示文本元素。学习如何将文本在标签内自动换行、添加一个图像到标签以及增加视觉效果。

下图显示了三种标签的常见用法。最左边的是一个带有图表的标签,中间的是一个旋转文本,最右边的是一个自适应标签大小进行换行的标签。

图1 三种标签
在这里插入图片描述

创建一个标签

JavaFX API提供了Label类的三个构造函数,用于在应用程序中创建标签:

        //一个空标签
        Label label1 = new Label();
        //一个带文本的标签
        Label label2 = new Label("Search");
        Image image = new Image(getClass().getResourceAsStream("search-label.png"));
        //一个带文本以及图表的标签
        Label label3 = new Label("Search", new ImageView(image));

当创建完一个Label之后,我们还可以用下面两个方法进行添加文本或者图形的:

  • setText(String text)设置在label上显示的文字
  • setGraphic(Node graphic) 设置图形图标

setTextFill 方法可以指定标签中文本的颜色。
接下来我们为刚才创建的label1添加文字和图标以及设置文字颜色

        Image image1 = new Image(getClass().getResourceAsStream("label.jpg"));
        label1.setGraphic(new ImageView(image1));
        label1.setText("Search");
        label1.setTextFill(Color.web("#0076a3"));

现在我们便得到了下面这个标签:

图2 带文本和图的标签
在这里插入图片描述
当在一个标签中同时定义了文本和图形之后我们可以通过setGraphicTextGap 方法调整文本和图形之间的空隙,另外setTextAlignment 可以在文本处于多行显示的时候调整文本的对其方式。setContentDisplay 方法可以设置文本以及图形在显示上的相对位置,可选的属性有ContentDisplay.类下面的常量LFFT, RIGHT, CENTER, TOP, BOTTOM。

设置字体

观察图1和图2我们发现两个label的字体不一样,因为我们还未给标签设置字体因此是以默认字体大小进行显示的。

通过使用label类中setFont 方法设置标签文本的字体。下面展示了两种不同的设置标签字体的方法,我们将label1的字体大小设置成30,并设置字体名Arial,给label2设置字体大小32,字体名Cambria

        //用Font类的构造方法
        label1.setFont(new Font("Arial", 30));
        //用Font类的font方法
        label2.setFont(Font.font("Cambria", 32));

文字换行

创建标签时,有时必须将其放置在小于渲染所需的空间内。 要分解(包装)文本使其适合布局区域,请为setWrapText方法设置true值,如

        label3.setText("A label that needs to be wrapped");
        label3.setWrapText(true);

假设标签的布局区域不仅受到其宽度的限制,还受到其高度的限制。 当无法呈现整个所需的文本字符串时,可以指定标签的行为,比如在某个位置用…表示。 使用Labeled类的setTextOverrun方法和可用的OverrunStyle类型之一来定义如何处理文本字符串中无法正确呈现的部分。 有关OverrunStyle类型的更多信息,请参见API文档。

使用效果

尽管label的内容无法呗编辑,但是可以给它添加一些视觉效果。下面的代码就是给label2添加了旋转270°的并且在垂直方向进行移动的效果:

        Label label2 = new Label("Values");
        label2.setFont(new Font("Cambria", 32));
        label2.setRotate(270);
        label2.setTranslateY(50);

旋转和平移是JavaFX API中可用的典型转换。 此外,您可以设置一种效果,当用户将鼠标指针悬停在标签上时,该标签会放大(放大)标签。

下面显示的代码片段将缩放效果应用于label3。 在标签上触发MOUSE_ENTERED事件时,将为setScaleX和setScaleY方法将比例因子设置为1.5。 当用户将鼠标光标从标签上移开并且发生MOUSE_EXITED事件时,比例因子设置为1.0,并且标签以其原始大小进行渲染。

        label3.setOnMouseExited(e->{
            label3.setScaleY(1);
            label3.setScaleX(1);
        });
        label3.setOnMouseEntered( e->{
            label3.setScaleY(1.5);
            label3.setScaleX(1.5);
        });

在这里插入图片描述

完整代码

package JavaFX04_Label;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.TextAlignment;
import javafx.stage.Stage;

import java.io.File;


/**
 * <h3>helloJavaFx</h3>
 * <p></p>
 *
 * @author : ZhouKun
 * @date : 2020-03-13 19:12
 **/
public class LabelDemo extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("Label Demo");
        HBox hBox = new HBox();

        //一个空标签
        Label label1 = new Label();
        Image image1 = new Image(getClass().getResourceAsStream("label.jpg"));
        label1.setGraphic(new ImageView(image1));
        label1.setText("Search");
        label1.setTextFill(Color.web("#0076a3"));
        //用Font类的构造方法
        label1.setFont(new Font("Arial", 30));
        label1.setWrapText(true);
        label1.setGraphicTextGap(10);

        //一个带文本的标签
        Label label2 = new Label("Values");
        //用Font类的font方法
        label2.setFont(Font.font("Cambria", 32));
        label2.setRotate(270);
        label2.setTranslateY(50);
        //一个带文本以及图表的标签

        Label label3 = new Label("Search");
        label3.setText("A label that needs to be wrapped");
        label3.setTranslateY(50);
        label3.setWrapText(true);
        label3.setOnMouseExited(e->{
            label3.setScaleY(1);
            label3.setScaleX(1);
        });
        label3.setOnMouseEntered( e->{
            label3.setScaleY(1.5);
            label3.setScaleX(1.5);
        });


        hBox.getChildren().addAll(label1, label2, label3);
        Scene scene = new Scene(hBox, 500, 180);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

相关资料

Label
Labeled

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值