2012-01-30 43 views
10

Dodałem JOptionPane do mojej aplikacji, ale nie wiem, jak zmienić kolor tła na biały?Jak zmienić kolor tła 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) {     }` 

Odpowiedz

14

za pomocą klasy 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)); 

lub

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 dla prostego sposobu – mKorbel

+5

Należy pamiętać, że zmieni to tło dla wszystkich wystąpień. – mre

+0

Czy mogę dodać do niego również przycisk niestandardowy? – itro

1

użyć czegoś takiego, aby zmienić kolor tła tylko dla tej jednej wyświetlaczu komunikatów, a nie cały system ...

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

Jaka jest metoda "messageBox()"? –

3

JOptionPane image

Dla każdego, kto ma problem z obrazem, znalazłem/dostosowałem rozwiązanie. W moim systemie uzyskałem ten wynik, niezależnie od tego, czy użyłem rozwiązania UIManager, jak inni napisali, czy zrobiłem JDialog i użyłem jd.getContentPane(). SetBackground (Color.white). Więc tutaj jest obejście wymyśliłem, gdzie pętla rekurencyjnie przez każdego składnika w JOptionPane i ustawić każdy JPanel kolor tła:

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]); 
    } 
} 

W kodzie, w którym chcesz mieć komunikat wyskakujący coś wzdłuż linii:

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

Gdzie JOptionPane pane i JDialog jd zostały wcześniej utworzone. Mam nadzieję, że to pomoże każdemu, kto miał ten problem.

+0

Dziękuję bardzo –

+0

To jest najlepsza odpowiedź –

0

Użyj tego kodu, jeśli masz ten sam problem co erik k atwood. To rozwiązuje problem:

UIManager.put("OptionPane.background", Color.WHITE); 
UIManager.getLookAndFeelDefaults().put("Panel.background", Color.WHITE); 
Powiązane problemy