JOptionPane: установка пользовательского значка не влияет, когда настроен внешний вид - PullRequest
1 голос
/ 11 июня 2011

Я хотел бы установить пользовательский значок вместо стандартного информационного значка JOptionPane.

Я пытался

ImageIcon myCustomIcon = ...;
UIManager.put("OptionPane.informationIcon", myCustomIcon);

Однако, по-видимому, это не действует из-за следующей строки:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

Комментирование этой строки дает правильное поведение.Конечно, я пытался вставить значок в UIManager как до, так и после настройки внешнего вида.Могу ли я как-то объединить их, чтобы переопределить значок информации глобально?

Я сейчас работаю над Ubuntu 10.04 ..

С уважением, Мортен

Ответы [ 2 ]

1 голос
/ 11 июня 2011

Работает нормально для меня, используя Metal и Windows LAF.

Возможно, ваш LAF не поддерживает свойство UIManager. Проверьте UIManager по умолчанию для списка свойств.

Если вам нужна дополнительная помощь, опубликуйте свой SSCCE , который демонстрирует проблему.

1 голос
/ 11 июня 2011

Вы пытались указать свой значок после настройки внешнего вида, таким образом:

JOptionPane.showMessageDialog(frame,
    "Eggs are not supposed to be green.",
    "Inane custom dialog",
    JOptionPane.INFORMATION_MESSAGE,
    myCustomIcon);

Обновление:

Следующий код отлично работает на моей Windows 7:

import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class OptionPaneIcon {
    public static void main (String[] args) {
        ImageIcon myCustomIcon = loadImageIcon("image.png");
        UIManager.put("OptionPane.informationIcon", myCustomIcon);
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (ClassNotFoundException ex) {
        } catch (InstantiationException ex) {
        } catch (IllegalAccessException ex) {
        } catch (UnsupportedLookAndFeelException ex) {
        }
        JOptionPane.showMessageDialog(null, "Hello!");
    }

    /** Returns an ImageIcon, or null if the path was invalid. */
    private static ImageIcon loadImageIcon(String path) {
        URL imgURL = OptionPaneIcon.class.getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("Couldn't find file: " + path);
                return null;
        }
    }
}

P.S. Извините за мое нетерпение.

...