Когда объект пользовательского интерфейса инициализируется, он пытается прочитать некоторые значения по умолчанию пользовательского интерфейса из диспетчера пользовательского интерфейса, который он ожидает (свойство FileChooser.viewMenuIcon
), которое всегда существует в Windows L & F, но не в Metal L & F.
Во-первых, предупреждение. Смешивание нескольких L & F одновременно в Swing опасно. Swing действительно предназначен для запуска только с одним L & F одновременно.
Лучший способ настроить «специальный» переключатель файлов - инициализировать все через UI Manager при запуске приложения.
//Do this first thing in your application before any other UI code
//Switch to Windows L&F
LookAndFeel originalLaf = UIManager.getLookAndFeel();
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
//Create the special file chooser
JFileChooser windowsChooser = new JFileChooser();
//Flick the L&F back to the default
UIManager.setLookAndFeel(originalLaf);
//And continue on initializing the rest of your application, e.g.
JFileChooser anotherChooserWithOriginalLaf = new JFileChooser();
Теперь у вас есть два компонента с двумя разными L & F, которые вы можете использовать.
//First chooser opens with windows L&F
windowsChooser.showOpenDialog(null);
//Second chooser uses default L&F
anotherChooserWithOriginalLaf.showOpenDialog(null);