Java: JLabel
Labels display fixed text or images on a GUI as information to the user, for example, as a label in front of a a JTextField, etc. You can have text (including HTML), an image, or both on a JLabel. A JLabel has a transparent background, so it will always match the container it is in.
JLabel Constructors
Assume the following declarations.
String text; Icon image; int alignment; //JLabel.LEFT
,JLabel.Center
, orJLabel.RIGHT
.
JLabel yourLabel = new JLabel(text); JLabel yourLabel = new JLabel(text, alignment); JLabel yourLabel = new JLabel(image); JLabel yourLabel = new JLabel(image, alignment); JLabel yourLabel = new JLabel(text, image, alignment);
Java Idiom
Because there is usually no need to refer to a JLabel after it has been added to a container, it is common to combine creation and adding the JLabel in one statement. For example.
p.add(new JLabel("Enter your ID:", JLabel.RIGHT));
is the same as
JLabel idLabel = new JLabel("Enter your ID:", JLabel.RIGHT); . . . p.add(idLabel);
HTML in JLabels
You may put HTML text in a JLabel. In this case the text should
begin with <html>
and end with </html>
.
JLabel font and color
The most user-friendly interfaces are usually obtained by using the default appearance (font, color, background), but there are cases where you want to change these.
Appearance: setting the font
The font of a JLabel can be changed like this.
JLabel title = new JLabel("Want a Raise?", JLabel.CENTER); title.setFont(new Font("Serif", Font.BOLD, 48));
Appearance: setting the text color
Use the setForeground method to set the text color.
JLabel title = new JLabel("Want a Raise?", JLabel.CENTER); title.setForeground(Color.white);
Appearance: setting the background color
Because a JLabel's background is transparent, there is no effect from using the setBackground method. To make a new background, you need to create a JPanel with the appropriate color and put the label on that. For example
JLabel title = new JLabel("Want a Raise?"); title.setForeground(Color.white); JPanel titlePanel = new JPanel(); titlePanel.setBackground(Color.blue); titlePanel.add(title); // adds to center of panel's default BorderLayout.
JLabel for output
Why using JLabel
for output is usually bad
It's possible to change the text of a JLabel, although this is
not generally a good idea after the user interface is already displayed.
For output JTextField
is often a better choice.
The use of JLabel
for output is mentioned because some textbooks
display output this way.
Here are some reasons not to use it.
- Can't copy to clipboard. The user can not copy text from a
JLabel
, but can from aJTextField
. - Can't set background. Changing the background of individual
components probably isn't a good idea, so this restriction on
JLabels
is not serious. You can change the background of aJTextField
, for better or worse. - Text length. This is where there are some serious
issues. You can always see the entire text
in a
JTextField
, altho you might have to scroll it it's long. There are several possibilities with aJLabel
. You may either not see all of the long text in aJLabel
, or putting long text into aJLabel
may cause the layout to be recomputed, resulting in a truly weird user experience.
Changing the text of a JLabel
Most JLabels are never changed, except for internationalization, and that is done before the user interface is shown. To change the text, use
yourLabel.setText(String newText); //