我想安装一个自定义图标来代替标准的JOptionPane信息图标..
我试过
ImageIcon myCustomIcon = ...;
UIManager.put("OptionPane.informationIcon", myCustomIcon);
然而,由于以下几行显然没有效果:
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
注释掉这一行会给出正确的行为。我当然尝试在设置外观之前/之后将图标放入UIManager。 我可以以某种方式将两者结合起来全局覆盖信息图标吗?
我正在研究Ubuntu 10.04 ..
此致 的Morten
答案 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。