JInternalFrame的Windows 10样式

问题描述 投票:1回答:1

我正在开发一个使用Swing的JInternalFrame的应用程序。我正在使用UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());的原生外观和感觉。

但是,在Windows 10计算机上运行时,内部框架的本机外观仍保留为Windows Vista / 7样式。使用this bug report的示例代码,我得到以下结果(包括JDK 8JDK 10):

JInternalFrame on Windows 10

我认为Swing提供的样式在很长一段时间内都没有更新,因此没有预期的方法来在比Vista更新的系统上像原生窗口那样设置内部框架的样式。是否有可能的解决方法?

java swing jinternalframe
1个回答
0
投票

在这种情况下,检查UIManager的主题是很好的:

    JFrame.setDefaultLookAndFeelDecorated(true);
    Object[] keys = UIManager.getLookAndFeel().getDefaults().keySet().toArray();
    Arrays.sort(keys, Comparator.comparing(Object::toString));
    for (int i = 0; i < keys.length; i++) {
        if (keys[i].toString().startsWith("InternalFrame.")) {
            System.out.println(keys[i] + " : " + javax.swing.UIManager.getDefaults().get(keys[i]));
        }
    }

您将找到以下键:

    "InternalFrame.closeIcon"
    "InternalFrame.iconifyIcon"
    "InternalFrame.maximizeIcon"
    "InternalFrame.minimizeIcon"

然后创建4个透明的.png图标,用于关闭,图标化,最大化/最小化。

private void setInternalFrameIcon(String uiKey, String resource) {
    ImageIcon icon = new ImageIcon(getClass().getResource(resource));
    UIManager.put(uiKey, close);
}

    setInternalFrameIcon("InternalFrame.closeIcon", "... .png");
    setInternalFrameIcon("InternalFrame.iconifyIcon", "... .png");
    setInternalFrameIcon("InternalFrame.maximizeIcon", "... .png");
    setInternalFrameIcon("InternalFrame.minimizeIcon", "... .png");
© www.soinside.com 2019 - 2024. All rights reserved.