Faken143
Faken143

Reputation: 219

Setting text background color?

How can I set text background color in JOptionPane?

Image:

enter image description here

UIManager UI = new UIManager();
UI.put("OptionPane.background", Color.white);
UIManager.put("Button.background", Color.white);
UI.put("Panel.background", Color.white);
UI.put("OptionPane.foreground", Color.white);
UI.put("OptionPane.messagebackground", Color.white);
UI.put("OptionPane.textbackground", Color.white);
UI.put("OptionPane.warningDialog.titlePane.shadow", Color.white);
UI.put("OptionPane.warningDialog.border.background", Color.white);
UI.put("OptionPane.warningDialog.titlePane.background", Color.white);
UI.put("OptionPane.warningDialog.titlePane.foreground", Color.white);
UI.put("OptionPane.questionDialog.border.background", Color.white);
UI.put("OptionPane.questionDialog.titlePane.background", Color.white);
UI.put("OptionPane.questionDialog.titlePane.foreground", Color.white);
UI.put("OptionPane.questionDialog.titlePane.shadow", Color.white);
UI.put("OptionPane.messageForeground", Color.white);
UI.put("OptionPane.foreground", Color.white);
UI.put("OptionPane.errorDialog.border.background", Color.white);
UI.put("OptionPane.errorDialog.titlePane.background", Color.white);
UI.put("OptionPane.errorDialog.titlePane.foreground", Color.white);
UI.put("OptionPane.errorDialog.titlePane.shadow", Color.white);

JOptionPane.showMessageDialog(null, "Hello world", "HELLO WORLD", JOptionPane.INFORMATION_MESSAGE);

Upvotes: 7

Views: 11284

Answers (3)

nIcE cOw
nIcE cOw

Reputation: 24616

Why not you simply add a custom JPanel at this place as shown below :

JOptionPane.showMessageDialog(frame, getLabelPanel(), "Hello World!",
                                        JOptionPane.INFORMATION_MESSAGE);

You can get the JPanel from a method, like :

private JPanel getLabelPanel() {
    JPanel panel = new JPanel();
    panel.setOpaque(true);
    panel.setBackground(Color.BLUE);
    JLabel helloLabel = new JLabel("Hello World!", JLabel.CENTER);
    helloLabel.setForeground(Color.WHITE);
    panel.add(helloLabel);

    return panel;
}

OUTPUT :

PANEIMAGE


UPDATE 1 :

Else you can try this to change everything,

uimanager.put("OptionPane.background", Color.BLUE);
uimanager.put("OptionPane.messagebackground", Color.BLUE);
uimanager.put("Panel.background", Color.BLUE);

UPDATED OUTPUT :

OPTIONPANEIMAGE

Upvotes: 9

kiheru
kiheru

Reputation: 6618

The cleanest would be using JDialog to create your own JOptionPane replacement, like nIcE cOw suggested. JOptionPane packs a lot of junk in its frame, and several of the components check no JOptionPane specific properties at all.

If you insist on using JOptionPane anyway, and want to change the background for only those, not for everything in the application, I'd say that if you want to set the background for the entire dialog with all its subcomponents, your best bet is to iterate all the window contents and call setBackground() on each. That could be done in its UI class, or individually for dialogs obtained with JOptionPane.createDialog(). Roughly like this:

void colorComponentTree(Component component, Color color) {
    if (component instanceof Container) {
        if (component instanceof JComponent) {
             ((JComponent) component).setBackground(color);
        }

        for (Component child : ((Container) component).getComponents()) {
             colorComponentTree(child, color);
        }
    }
}

That is however really ugly and I seriously recommend taking the custom dialog route.

Upvotes: 2

Sanjaya Liyanage
Sanjaya Liyanage

Reputation: 4746

try

UIManager UI=new UIManager();
 UI.put("OptionPane.background",new ColorUIResource(255,255,0));
 UI.put("Panel.background",new ColorUIResource(255,255,0));

Upvotes: 2

Related Questions