2012-01-30 208 views
10

He agregado JOptionPane a mi aplicación pero no sé cómo cambiar el color de fondo a blanco?¿Cómo cambiar el color de fondo de JOptionPane?

`int option = JOptionPane.showConfirmDialog(bcfiDownloadPanel, 
      new Object[]{"Host: " + source, panel}, 
      "Authorization Required", 
      JOptionPane.OK_CANCEL_OPTION, 
      JOptionPane.PLAIN_MESSAGE 
    ); 

    if (option == JOptionPane.OK_OPTION) {     }` 

Respuesta

14

Utilizando la clase UIManager

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); 
+0

+1 de manera simple – mKorbel

+5

Tenga en cuenta que esto cambiará el fondo de todas las instancias. – mre

+0

¿Es posible agregar mi botón personalizado también? – itro

1

usar algo como esto para cambiar el color de fondo sólo para éste pantalla de mensajes y no 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); 
+0

¿Cuál es el método "messageBox()"? –

3

JOptionPane image

Para cualquiera que tenga el problema en la imagen, encontré/adapté una solución. En mi sistema, obtuve ese resultado, si utilicé la solución UIManager como otros publicaron, o hice un JDialog y usé jd.getContentPane(). SetBackground (Color.blanco). Así que aquí está la solución alternativa que se me ocurrió, donde bucle de forma recursiva a través de cada componente en el JOptionPane, y establecer 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 en el que desea que el mensaje emergente , algo a lo largo de las líneas de:

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 paneJDialog jd y han sido creados previamente. Espero que esto ayude a cualquiera que tenga ese problema.

+0

Muchas gracias –

+0

Esta es la mejor respuesta –

0

Utilice este código si tiene el mismo problema que erik k atwood. Esto resuelve el problema:

UIManager.put("OptionPane.background", Color.WHITE); 
UIManager.getLookAndFeelDefaults().put("Panel.background", Color.WHITE); 
Cuestiones relacionadas