Java 8は最終的にこれに対する解決策をもたらすかもしれませんが、残念ながら(Swingアプリの場合)JavaFXクラスFileChooserとしてのみ提供されます。
私はここからこのコードをテストしました、そしてそれは確かに現代のダイアログをポップします(ここではWindows7):
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);
Platform.runLater
これをSwingアプリに統合するには、 (ここに表示されているように)を介してjavafxスレッドで実行する必要があります。
これには、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);
});