Solución:
Usando el UIManager
clase
import javax.swing.UIManager;
UIManager UI=new UIManager();
UI.put("OptionPane.background",new ColorUIResource(255,0,0));
UI.put("Panel.background",new ColorUIResource(255,0,0));
o
UIManager UI=new UIManager();
UI.put("OptionPane.background", Color.white);
UI.put("Panel.background", Color.white);
JOptionPane.showMessageDialog(null,"Text","SetColor",JOptionPane.INFORMATION_MESSAGE);
Para cualquiera que tenga el mismo problema como en la imagen de arriba, encontré / adapté una solución. En mi sistema, obtuve ese resultado, ya sea que usé la solución UIManager como otros han publicado, o hice un JDialog y usé jd.getContentPane().setBackground(Color.white)
. Así que aquí está la solución que se me ocurrió, donde recorre recursivamente cada componente en JOptionPane y establece el color de fondo de cada JPanel:
private void getComponents(Container c){
Component[] m = c.getComponents();
for(int i = 0; i < m.length; i++){
if(m[i].getClass().getName() == "javax.swing.JPanel")
m[i].setBackground(Color.white);
if(c.getClass().isInstance(m[i]))
getComponents((Container)m[i]);
}
}
En su código donde desea que aparezca el mensaje emergente, algo como:
pane = new JOptionPane("Your message here",
JOptionPane.PLAIN_MESSAGE ,JOptionPane.DEFAULT_OPTION);
getComponents(pane);
pane.setBackground(Color.white);
jd = pane.createDialog(this, "Message");
jd.setVisible(true);
Dónde JOptionPane pane
y JDialog jd
han sido creados previamente. Espero que esto ayude a cualquiera que haya tenido ese problema.
Use algo como esto para cambiar el color de fondo solo para este mensaje y no para todo el sistema …
Object paneBG = UIManager.get("OptionPane.background");
Object panelBG = UIManager.get("Panel.background");
UIManager.put("OptionPane.background", new Color(...));
UIManager.put("Panel.background", new Color(...));
int ret = messageBox(msg, null, (short)type);
UIManager.put("OptionPane.background", paneBG);
UIManager.put("Panel.background", panelBG);