如何为所有Java Swing窗口设置默认图标?

3
如何为所有Java Swing窗口设置默认图标?
否则,我必须为我创建的每个框架设置图标。
您有什么建议吗? 简单的hackings也可以接受。
谢谢。
更新:最好的方法是您建议的方法不会影响现有的框架创建代码。谢谢。

应用程序应该有一个单独的JFrame。然后,您可以使用JDialogs来创建应用程序的其他子窗口。因此,如krock所建议的,您只需要在首次创建JFrame时在一个位置更改图标。 - camickr
2个回答

2
创建一个抽象类,并extends JFrame
在构造函数中设置图标。
创建一个继承你的新Abstract Class的子类,并在你的构造函数中调用super
public abstract class MainFrame extends JFrame {
    protected MainFrame() {
        this.setIconImage(null); // Put your own image instead of null
    }
}

public class ChildFrame extends MainFrame {
    public ChildFrame() {
        super();
    }
}

您可以直接从您的新类创建对象。
public class MainFrame extends JFrame {
    public MainFrame() {
        this.setIconImage(null); // Put your own image instead of null
    }
}

public class Frame {

    private MainFrame mainframe = new MainFrame();

    public Frame() {
        super();
    }
}

1
此外,我相信所有 JDialog 都会继承它们父级窗口的图标,所以只需要担心 JFrames/JWindows。+1 - krock
1
这仍然是为每个创建的框架设置图标的另一种方法。最大的缺点是它与现有代码不兼容。 - Defd
1
同时,它与第三方库生成框架的兼容性不佳。 - Emmanuel Bourg

1
为了全局改变Windows图标而不改变旧代码,我使用以下代码片段。
public static void fixWindowsIcons(final List<Image> iconImages) {
    PropertyChangeListener l = new PropertyChangeListener() {

        private Window prevActiveWindow;

        @Override
        public void propertyChange(PropertyChangeEvent evt) {
            final Window o = KeyboardFocusManager.getCurrentKeyboardFocusManager()
                    .getActiveWindow();
            if (o != null && prevActiveWindow != o) {
                prevActiveWindow = o;
                List<Image> windowIcons = o.getIconImages();
                if (windowIcons == null || windowIcons.size() == 0) {
                    o.setIconImages(iconImages);
                }
            }
        }
    };
    KeyboardFocusManager.getCurrentKeyboardFocusManager()
            .addPropertyChangeListener("activeWindow", l); //$NON-NLS-1$
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接