Как изменить цвет фона JOptionPane? - PullRequest
11 голосов
/ 30 января 2012

Я добавил 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) {                  }`

Ответы [ 4 ]

15 голосов
/ 30 января 2012

Используя 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));

или

 UIManager UI=new UIManager();
 UI.put("OptionPane.background", Color.white);
 UI.put("Panel.background", Color.white);

 JOptionPane.showMessageDialog(null,"Text","SetColor",JOptionPane.INFORMATION_MESSAGE);
4 голосов
/ 14 июня 2016

Изображение JOptionPane

Для тех, у кого есть проблема с изображением, я нашел / адаптировал решение.В моей системе я получил такой результат, независимо от того, использовал ли я решение UIManager, как другие опубликовали, или сделал JDialog и использовал jd.getContentPane (). SetBackground (Color.white).Итак, вот обходной путь, который я придумал, где вы рекурсивно просматриваете каждый компонент в JOptionPane и устанавливаете цвет фона каждого 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]);
    }
}

В вашем коде, где вы хотите, чтобы сообщение всплыло- что-то вроде:

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

Где JOptionPane pane и JDialog jd были ранее созданы.Надеюсь, это поможет любому, у кого была такая проблема.

2 голосов
/ 11 мая 2015

Используйте что-то вроде этого, чтобы изменить цвет фона только для этого дисплея одного сообщения, а не для всей системы ...

    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);
1 голос
/ 13 декабря 2016

Используйте этот код, если у вас та же проблема, что и у Эрика К Атвуда. Это решает проблему:

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