JOptionPane:安装自定义图标在外观设置时无效

时间:2011-06-11 14:02:56

标签: java swing joptionpane uimanager

我想安装一个自定义图标来代替标准的JOptionPane信息图标..

我试过

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

然而,由于以下几行显然没有效果:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

注释掉这一行会给出正确的行为。我当然尝试在设置外观之前/之后将图标放入UIManager。 我可以以某种方式将两者结合起来全局覆盖信息图标吗?

我正在研究Ubuntu 10.04 ..

此致 的Morten

2 个答案:

答案 0 :(得分:1)

您是否曾尝试以这样的方式在设置外观和感觉后指定图标:

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。对不起我的不耐烦。

答案 1 :(得分:1)

使用Metal和Windows LAF可以正常使用。

也许你的LAF不支持UIManager属性。查看UIManager Defaults以获取属性列表。

如果您需要更多帮助,请发布展示问题的SSCCE