1

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

我试过

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

但是,由于以下行,显然这没有效果:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

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

我现在正在开发 Ubuntu 10.04..

问候,莫腾

4

2 回答 2

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

PS对不起我的不耐烦。

于 2011-06-11T14:47:04.087 回答
1

使用 Metal 和 Windows LAF 对我来说效果很好。

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

如果您需要更多帮助,请发布说明问题的SSCCE 。

于 2011-06-11T15:24:29.030 回答