Стиль Windows 10 для JInternalFrame - PullRequest
       39

Стиль Windows 10 для JInternalFrame

0 голосов
/ 10 сентября 2018

Я работаю над приложением, которое использует Swing JInternalFrame.Я использую нативный внешний вид с UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());.

Однако, нативный внешний вид внутренней рамки остается в стиле Windows Vista / 7 при работе на машине с Windows 10.С примером кода из этого отчета об ошибке я получаю следующий результат (с JDK 8 и JDK 10):

JInternalFrame on Windows 10

Я предполагаю, что стиль, поставляемый с Swing, долгое время не обновлялся, поэтому в системах, более новых, чем Vista, не предусмотрено никакого способа стилизации внутренней рамки, как собственного окна.Есть ли возможный обходной путь вместо этого?

1 Ответ

0 голосов
/ 10 сентября 2018

В этой ситуации хорошо проверить тему 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");
...