Допустим, у меня есть 2 JFrames. После установки видимого JFrame вы не можете изменить LAF, не установив сначала скрытую и обычную видимость. Это означает мерцание и скачок JFrame вверх.
В противном случае вы получите это:
(Некоторая смесь между Metal и системой Ubuntu LAF)
Да и перекраска не помогает.
Теперь предположим, что первый JFrame был создан с использованием Metal LAF. После отображения LAF меняется на системный LAF. Потом появляется второй. Теперь первый затронут этой забавной вещью. Второй в порядке. Почему это так? Это код, который у меня есть:
public static void main(String[] args) throws ClassNotFoundException, UnsupportedLookAndFeelException, InstantiationException, IllegalAccessException {
JFrame first = new JFrame("First");
first.add(new JButton("Click me, I look funny"));
first.setPreferredSize(new Dimension(100, 100));
first.pack();
first.setVisible(true);
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
first.repaint();
JFrame second = new JFrame("Second");
second.add(new JButton("Click"));
second.setPreferredSize(new Dimension(100, 100));
second.pack();
second.setVisible(true);
second.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
Итак, как я могу заставить новый LAF влиять только на 1 JFrame?
Или LAF является глобальным и не может применяться только к 1 JFrame?