Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does Swing support Windows 7-style file choosers?

I just added a standard "Open file" dialog to a small desktop app I'm writing, based on the JFileChooser entry of the Swing Tutorial. It's generating a window that looks like this:

screenshot of unwanted/XP-style window

but I would prefer to have a window that looks like this:

screenshot of desired/7-style window

In other words, I want my file chooser to have Windows Vista/Windows 7's style, not Windows XP's. Is this possible in Swing? If so, how is it done? (For the purposes of this question, assume that the code will be running exclusively on Windows 7 computers.)

like image 521
Pops Avatar asked Apr 18 '11 13:04

Pops


1 Answers

It does not appear this is supported in Swing in Java 6.

Currently, the simplest way I can find to open this dialog is through SWT, not Swing. SWT's FileDialog (javadoc) brings up this dialog. The following is a modification of SWT's FileDialog snippet to use an open instead of save dialog. I know this isn't exactly what you're looking for, but you could isolate this to a utility class and add swt.jar to your classpath for this functionality.

import org.eclipse.swt.*; import org.eclipse.swt.widgets.*;  public class SWTFileOpenSnippet {     public static void main (String [] args) {         Display display = new Display ();         Shell shell = new Shell (display);         // Don't show the shell.         //shell.open ();           FileDialog dialog = new FileDialog (shell, SWT.OPEN | SWT.MULTI);         String [] filterNames = new String [] {"All Files (*)"};         String [] filterExtensions = new String [] {"*"};         String filterPath = "c:\\";         dialog.setFilterNames (filterNames);         dialog.setFilterExtensions (filterExtensions);         dialog.setFilterPath (filterPath);         dialog.open();         System.out.println ("Selected files: ");         String[] selectedFileNames = dialog.getFileNames();         for(String fileName : selectedFileNames) {             System.out.println("  " + fileName);         }         shell.close();         while (!shell.isDisposed ()) {             if (!display.readAndDispatch ()) display.sleep ();         }         display.dispose ();     } }  
like image 61
John McCarthy Avatar answered Oct 07 '22 01:10

John McCarthy