Saleh Feek Saleh Feek - 4 months ago 14
Java Question

JLabel.setBackground(Color color) doesn't work?

In this SSCCE code:

This method work

label.setForeground(Color.GREEN);


But this next method doesn't work!

label.setBackground(Color.BLUE);


import java.awt.*;
import javax.swing.*;

public class LabelColorTest extends JPanel
{

static JLabel label;
JPanel panel;

public LabelColorTest()
{
label = new JLabel();
label.setVerticalAlignment(JLabel.CENTER);
label.setHorizontalAlignment(JLabel.CENTER);
label.setText("Hello world");

panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(label, BorderLayout.CENTER);

label.setForeground(Color.GREEN); //HERE
label.setBackground(Color.BLUE); //HERE


this.setLayout(new BorderLayout());
this.add(panel);
}

private static void createAndShowGUI()
{
JFrame frame = new JFrame("Hellow world");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 250);
frame.add(new LabelColorTest(), BorderLayout.CENTER);
frame.setVisible(true);
}

public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
UIManager.put("swing.boldMetal", Boolean.FALSE);
createAndShowGUI();

}
});
}
}

Answer

A component must be opaque for its background do be effective, a JLabel's default is false, so you have to set it:

label.setOpaque(true);