Java 8 может, наконец, решить эту проблему, но, к сожалению (для приложений Swing), он поставляется только как класс JavaFX FileChooser:
Я протестировал этот код из здесь и действительно появляется современный диалог (Windows 7 здесь):
FileChooser fileChooser = new FileChooser();
//Set extension filter
FileChooser.ExtensionFilter extFilterJPG = new FileChooser.ExtensionFilter("JPG files (*.jpg)", "*.JPG");
FileChooser.ExtensionFilter extFilterPNG = new FileChooser.ExtensionFilter("PNG files (*.png)", "*.PNG");
fileChooser.getExtensionFilters().addAll(extFilterJPG, extFilterPNG);
//Show open file dialog
File file = fileChooser.showOpenDialog(null);
Чтобы интегрировать это в приложение Swing, вам нужно будет запустить его в потоке javafx через Platform.runLater
(как показано здесь).
Обратите внимание, что для этого вам потребуется инициализировать поток javafx (в примере это делается при инициализации сцены в new JFXPanel()
).
Подводя итог, можно сказать, что готовое к запуску решение в Swing-приложении будет выглядеть так:
new JFXPanel(); // used for initializing javafx thread (ideally called once)
Platform.runLater(() -> {
FileChooser fileChooser = new FileChooser();
//Set extension filter
FileChooser.ExtensionFilter extFilterJPG = new FileChooser.ExtensionFilter("JPG files (*.jpg)", "*.JPG");
FileChooser.ExtensionFilter extFilterPNG = new FileChooser.ExtensionFilter("PNG files (*.png)", "*.PNG");
fileChooser.getExtensionFilters().addAll(extFilterJPG, extFilterPNG);
//Show open file dialog
File file = fileChooser.showOpenDialog(null);
});
person
Community
schedule
22.08.2014