Label and Text differences in JavaFX

What is the difference between javafx.scene.text.Text and javafx.scene.control.Label?

The documentation says:

  • Label is a non-editable text control.
  • The Text class defines a node that displays a text.

But the Label class has a method "setText" and "textProperty", therefore is editable.


Solution 1:

As Harry Blargle pointed out, "non-editable" means "not editable by the user." So both Label and Text are non-editable.

Label and Text have different CSS properties. Label inherits from Labeled, Control, and Region, which means it inherits a great many styleable properties which Text doesn't have. A Label can have alignment, a graphic, a background, a border, a displayed keyboard mnemonic, built-in wrapping, and can be intelligently clipped with an ellipsis ("…").

Text can participate in a TextFlow. (Technically, Label can also, but it is treated as just another embedded control and is not laid out as text.)

In general, if you want to show the purpose of an input control by placing one or more words next to it, and/or you want to allow direct keyboard navigation to an input control, you use a Label. If you want to display text content not associated with input, you use Text.

Solution 2:

A Text is a geometric shape (like a Rectangle or a Circle), while Label is a UI control (like a Button or a CheckBox).

In Swing, geometric shapes were restricted to the painting mechanism, while in JavaFX they can be used in more generic ways.