JavaFX API的javafx.scene.control包中的Label类可用于显示一个文本元素。
我们可以包装文本元素以适应特定空间,添加图形图像或使用JavaFX Label控件应用视觉效果。
以下代码显示如何使用Label显示文本。

  1. import javafx.application.Application;
  2. import javafx.geometry.HPos;
  3. import javafx.geometry.Insets;
  4. import javafx.scene.Group;
  5. import javafx.scene.Scene;
  6. import javafx.scene.control.Label;
  7. import javafx.scene.layout.GridPane;
  8. import javafx.scene.paint.Color;
  9. import javafx.stage.Stage;
  10. public class Main extends Application {
  11. public static void main(String[] args) {
  12. Application.launch(args);
  13. }
  14. @Override
  15. public void start(Stage primaryStage) {
  16. Group root = new Group();
  17. Scene scene = new Scene(root, 300, 130, Color.WHITE);
  18. GridPane gridpane = new GridPane();
  19. gridpane.setPadding(new Insets(5));
  20. gridpane.setHgap(10);
  21. gridpane.setVgap(10);
  22. Label label = new Label("Label");
  23. GridPane.setHalignment(label, HPos.CENTER);
  24. gridpane.add(label, 0, 0);
  25. root.getChildren().add(gridpane);
  26. primaryStage.setScene(scene);
  27. primaryStage.show();
  28. }
  29. }

image.png

创建标签

JavaFX API提供了Label类的三个构造函数来创建标签。

  1. //An empty label
  2. Label label1 = new Label();
  3. //A label with the text element
  4. Label label2 = new Label("Name");
  5. //A label with the text element and graphical icon
  6. Image image = new Image("01.png");
  7. Label label3 = new Label("Name", new ImageView(image));

image.png

标签内容

创建标签后,我们可以使用Label类中的以下方法添加文本和图形内容。

  • setText(String text) - 设置标签的文本标题
  • setGraphic(Node graphic) - 设置图形图标

setGraphicTextGap()方法设置文本和图标之间的间距。setTextFill()方法设置标签文本的颜色。以下代码创建文本标签,向其添加图标,并为文本设置填充颜色。

  1. Label label1 = new Label("Name");
  2. Image image = new Image("01.png");
  3. label1.setGraphic(new ImageView(image));
  4. label1.setTextFill(Color.web("#FF76a3"));

image.png
以下代码显示如何设置Label Text颜色。

  1. import javafx.application.Application;
  2. import javafx.scene.Group;
  3. import javafx.scene.Scene;
  4. import javafx.scene.control.Label;
  5. import javafx.scene.layout.HBox;
  6. import javafx.scene.paint.Color;
  7. import javafx.stage.Stage;
  8. public class Main extends Application {
  9. public static void main(String[] args) {
  10. launch(args);
  11. }
  12. @Override
  13. public void start(Stage stage) {
  14. Scene scene = new Scene(new Group());
  15. stage.setTitle("Label Sample");
  16. stage.setWidth(400);
  17. stage.setHeight(180);
  18. HBox hbox = new HBox();
  19. Label label1 = new Label("Search");
  20. label1.setTextFill(Color.web("#0076a3"));
  21. hbox.setSpacing(10);
  22. hbox.getChildren().add((label1));
  23. ((Group) scene.getRoot()).getChildren().add(hbox);
  24. stage.setScene(scene);
  25. stage.show();
  26. }
  27. }

image.png
setTextAlignment()方法可以在其布局区域内设置标签内容的对齐方式。setContentDisplay()方法设置图形相对于文本的位置。该方法接受以下ContentDisplay常量中的一个:LFFT,RIGHT,CENTER,TOP,BOTTOM。

标签字体

如果未设置Label控件的字体,则使用默认字体大小进行渲染。要设置字体文本大小,请使用Label类中的setFont方法。
以下代码将label1文本的大小设置为30点像素,将字体名称设置为Arial。

  1. label.setFont(new Font("Arial", 30));

image.png
将文本大小设置为32点像素,将字体名称设置为Cambria。

  1. label.setFont(Font.font("Cambria", 32));

image.png
以下代码显示如何设置标签的字体。

  1. import javafx.application.Application;
  2. import javafx.scene.Group;
  3. import javafx.scene.Scene;
  4. import javafx.scene.control.Label;
  5. import javafx.scene.layout.HBox;
  6. import javafx.scene.text.Font;
  7. import javafx.stage.Stage;
  8. public class Main extends Application {
  9. public static void main(String[] args) {
  10. launch(args);
  11. }
  12. @Override
  13. public void start(Stage stage) {
  14. Scene scene = new Scene(new Group());
  15. stage.setWidth(400);
  16. stage.setHeight(180);
  17. HBox hbox = new HBox();
  18. Label label1 = new Label("Search");
  19. label1.setFont(new Font("Arial", 30));
  20. hbox.setSpacing(10);
  21. hbox.getChildren().add((label1));
  22. ((Group) scene.getRoot()).getChildren().add(hbox);
  23. stage.setScene(scene);
  24. stage.show();
  25. }
  26. }

image.png

包装文本

要包装文本以将文本适合布局区域,请使用setWrapText方法并设置为true值。

  1. Label label = new Label("A long long long long long text");
  2. label.setWrapText(true);

image.png
以下代码显示如何包装Label。

  1. import javafx.application.Application;
  2. import javafx.scene.Group;
  3. import javafx.scene.Scene;
  4. import javafx.scene.control.Label;
  5. import javafx.scene.layout.HBox;
  6. import javafx.scene.text.TextAlignment;
  7. import javafx.stage.Stage;
  8. public class Main extends Application {
  9. public static void main(String[] args) {
  10. launch(args);
  11. }
  12. @Override
  13. public void start(Stage stage) {
  14. Scene scene = new Scene(new Group());
  15. stage.setTitle("Label Sample");
  16. stage.setWidth(400);
  17. stage.setHeight(180);
  18. HBox hbox = new HBox();
  19. Label label1 = new Label("Search long long long long long long long long long ");
  20. label1.setPrefWidth(100);
  21. label1.setWrapText(true);
  22. hbox.setSpacing(10);
  23. hbox.getChildren().add((label1));
  24. ((Group) scene.getRoot()).getChildren().add(hbox);
  25. stage.setScene(scene);
  26. stage.show();
  27. }
  28. }

image.png
当不可能渲染文本字符串时,我们可以使用setTextOverrun方法控制如何从标签渲染文本。setTextOverrun方法接受一个OverrunStyle值。

应用效果

我们可以对Label控件应用视觉效果或转换。以下代码将标签旋转270度,并将其位置垂直平移。

  1. Label label = new Label("Name");
  2. label.setRotate(270);
  3. label.setTranslateY(50);

image.png
以下代码显示如何使用旋转创建垂直标签。

  1. import javafx.application.Application;
  2. import javafx.scene.Group;
  3. import javafx.scene.Scene;
  4. import javafx.scene.control.Label;
  5. import javafx.scene.layout.HBox;
  6. import javafx.scene.text.TextAlignment;
  7. import javafx.stage.Stage;
  8. public class Main extends Application {
  9. public static void main(String[] args) {
  10. launch(args);
  11. }
  12. @Override
  13. public void start(Stage stage) {
  14. Scene scene = new Scene(new Group());
  15. stage.setTitle("Label Sample");
  16. stage.setWidth(400);
  17. stage.setHeight(180);
  18. HBox hbox = new HBox();
  19. Label label1 = new Label("Search");
  20. label1.setRotate(270);
  21. hbox.setSpacing(10);
  22. hbox.getChildren().add((label1));
  23. ((Group) scene.getRoot()).getChildren().add(hbox);
  24. stage.setScene(scene);
  25. stage.show();
  26. }
  27. }

image.png
以下代码显示了如何使用setTranslateY来移动标签。

  1. import javafx.application.Application;
  2. import javafx.scene.Group;
  3. import javafx.scene.Scene;
  4. import javafx.scene.control.Label;
  5. import javafx.scene.layout.HBox;
  6. import javafx.scene.text.TextAlignment;
  7. import javafx.stage.Stage;
  8. public class Main extends Application {
  9. public static void main(String[] args) {
  10. launch(args);
  11. }
  12. @Override
  13. public void start(Stage stage) {
  14. Scene scene = new Scene(new Group());
  15. stage.setTitle("Label Sample");
  16. stage.setWidth(400);
  17. stage.setHeight(180);
  18. HBox hbox = new HBox();
  19. Label label1 = new Label("Search");
  20. label1.setTranslateY(50);
  21. hbox.setSpacing(10);
  22. hbox.getChildren().add((label1));
  23. ((Group) scene.getRoot()).getChildren().add(hbox);
  24. stage.setScene(scene);
  25. stage.show();
  26. }
  27. }

image.png
当用户将鼠标光标悬停在标签上时,可以缩放标签。当在标签上触发MOUSE_ENTERED事件时,以下代码将缩放效果应用于标签。
以下代码显示如何缩放标签。

  1. import javafx.application.Application;
  2. import javafx.event.EventHandler;
  3. import javafx.scene.Group;
  4. import javafx.scene.Scene;
  5. import javafx.scene.control.Label;
  6. import javafx.scene.input.MouseEvent;
  7. import javafx.scene.layout.HBox;
  8. import javafx.stage.Stage;
  9. public class Main extends Application {
  10. public static void main(String[] args) {
  11. launch(args);
  12. }
  13. @Override
  14. public void start(Stage stage) {
  15. Scene scene = new Scene(new Group());
  16. stage.setTitle("Label Sample");
  17. stage.setWidth(400);
  18. stage.setHeight(180);
  19. HBox hbox = new HBox();
  20. final Label label1 = new Label("Search long long long long long long long long long ");
  21. label1.setOnMouseEntered((e)->{
  22. label1.setScaleX(1.5);
  23. label1.setScaleY(1.5);
  24. });
  25. label1.setOnMouseExited((e)->{
  26. label1.setScaleX(1);
  27. label1.setScaleY(1);
  28. });
  29. hbox.setSpacing(10);
  30. hbox.getChildren().add((label1));
  31. ((Group) scene.getRoot()).getChildren().add(hbox);
  32. stage.setScene(scene);
  33. stage.show();
  34. }
  35. }

image.png
image.png

标签鼠标事件

以下代码显示了如何为标签添加鼠标进出事件处理程序。

  1. import javafx.application.Application;
  2. import javafx.event.EventHandler;
  3. import javafx.scene.Group;
  4. import javafx.scene.Scene;
  5. import javafx.scene.control.Label;
  6. import javafx.scene.input.MouseEvent;
  7. import javafx.scene.layout.HBox;
  8. import javafx.stage.Stage;
  9. public class Main extends Application {
  10. public static void main(String[] args) {
  11. launch(args);
  12. }
  13. @Override
  14. public void start(Stage stage) {
  15. Scene scene = new Scene(new Group());
  16. stage.setTitle("Label Sample");
  17. stage.setWidth(400);
  18. stage.setHeight(180);
  19. HBox hbox = new HBox();
  20. final Label label1 = new Label("Search long long long long long long long long long ");
  21. label1.setOnMouseEntered((e)->{
  22. label1.setScaleX(1.5);
  23. label1.setScaleY(1.5);
  24. });
  25. label1.setOnMouseExited((e)->{
  26. label1.setScaleX(1);
  27. label1.setScaleY(1);
  28. });
  29. hbox.setSpacing(10);
  30. hbox.getChildren().add((label1));
  31. ((Group) scene.getRoot()).getChildren().add(hbox);
  32. stage.setScene(scene);
  33. stage.show();
  34. }
  35. }

更新标签

以下代码显示了如何在Button单击事件中更改Label文本。

  1. import javafx.application.Application;
  2. import javafx.event.ActionEvent;
  3. import javafx.event.EventHandler;
  4. import javafx.scene.Group;
  5. import javafx.scene.Scene;
  6. import javafx.scene.control.Button;
  7. import javafx.scene.control.Label;
  8. import javafx.stage.Stage;
  9. public class Main extends Application {
  10. public static void main(String[] args) {
  11. Application.launch(args);
  12. }
  13. @Override
  14. public void start(Stage primaryStage) {
  15. Button btn = new Button();
  16. final Label lbl = new Label();
  17. primaryStage.setTitle("Hello World!");
  18. lbl.setLayoutX(70);
  19. lbl.setLayoutY(150);
  20. btn.setLayoutX(100);
  21. btn.setLayoutY(100);
  22. btn.setText("Hello, World!");
  23. btn.setOnAction((e)->lbl.setText("'Hello, World'文本被点击了。"));
  24. Group root = new Group();
  25. root.getChildren().add(btn);
  26. root.getChildren().add(lbl);
  27. primaryStage.setScene(new Scene(root, 300, 250));
  28. primaryStage.show();
  29. }
  30. }

image.png
image.png