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
JLabelsis 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 aJLabelmay 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); //