Java 8 peut enfin apporter une solution à ce problème, mais malheureusement (pour le Swing apps) il s'agit uniquement que de la classe JavaFX FileChooser:
J'ai testé ce code à partir d' ici, et en effet les pop moderne, une boîte de dialogue (Windows 7, cliquez ici):
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);
Comment intégrer cela dans un Swing d'application, cependant, je ne sais pas. Le problème est que Swing/AWT et JavaFX ont d'événements distincts de fils. (Dans le JavaFX cas, c'est en fait le système d'exploitation natif de l'événement de fil, j'imagine.) Cependant il y a des normes à ce sujet. (Voir ce Tutoriel).
Malheureusement, je ne suis pas en mesure de passer mon code pour Java 8 pour l'instant, donc je n'ai pas vraiment le temps de jouer en ce moment. Je vais revenir et modifier ce post si/quand j'ai terminé ce puzzle. (Ou peut-être une autre âme charitable pourrait le faire, si ils me battre pour elle, d'où le wiki de la communauté de " drapeau)