//Send questions, comments, bug reports, etc. to the authors:
//Rob Warner (rwarner@interspatial.com)
//Robert Harris (rbrt_harris@yahoo.com)
import java.io.File;
import org.eclipse.swt.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
/**
* This class demonstrates FileDialog
*/
public class ShowFileDialog {
// These filter names are displayed to the user in the file dialog. Note that
// the inclusion of the actual extension in parentheses is optional, and
// doesn't have any effect on which files are displayed.
private static final String[] FILTER_NAMES = {
"OpenOffice.org Spreadsheet Files (*.sxc)",
"Microsoft Excel Spreadsheet Files (*.xls)",
"Comma Separated Values Files (*.csv)", "All Files (*.*)"};
// These filter extensions are used to filter which files are displayed.
private static final String[] FILTER_EXTS = { "*.sxc", "*.xls", "*.csv", "*.*"};
/**
* Runs the application
*/
public void run() {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText("File Dialog");
createContents(shell);
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
/**
* Creates the contents for the window
*
* @param shell the parent shell
*/
public void createContents(final Shell shell) {
shell.setLayout(new GridLayout(5, true));
new Label(shell, SWT.NONE).setText("File Name:");
final Text fileName = new Text(shell, SWT.BORDER);
GridData data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan = 4;
fileName.setLayoutData(data);
Button multi = new Button(shell, SWT.PUSH);
multi.setText("Open Multiple...");
multi.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
// User has selected to open multiple files
FileDialog dlg = new FileDialog(shell, SWT.MULTI);
dlg.setFilterNames(FILTER_NAMES);
dlg.setFilterExtensions(FILTER_EXTS);
String fn = dlg.open();
if (fn != null) {
// Append all the selected files. Since getFileNames() returns only
// the names, and not the path, prepend the path, normalizing
// if necessary
StringBuffer buf = new StringBuffer();
String[] files = dlg.getFileNames();
for (int i = 0, n = files.length; i < n; i++) {
buf.append(dlg.getFilterPath());
if (buf.charAt(buf.length() - 1) != File.separatorChar) {
buf.append(File.separatorChar);
}
buf.append(files[i]);
buf.append(" ");
}
fileName.setText(buf.toString());
}
}
});
Button open = new Button(shell, SWT.PUSH);
open.setText("Open...");
open.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
// User has selected to open a single file
FileDialog dlg = new FileDialog(shell, SWT.OPEN);
dlg.setFilterNames(FILTER_NAMES);
dlg.setFilterExtensions(FILTER_EXTS);
String fn = dlg.open();
if (fn != null) {
fileName.setText(fn);
}
}
});
Button save = new Button(shell, SWT.PUSH);
save.setText("Save...");
save.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
// User has selected to save a file
FileDialog dlg = new FileDialog(shell, SWT.SAVE);
dlg.setFilterNames(FILTER_NAMES);
dlg.setFilterExtensions(FILTER_EXTS);
String fn = dlg.open();
if (fn != null) {
fileName.setText(fn);
}
}
});
}
/**
* The application entry point
*
* @param args the command line arguments
*/
public static void main(String[] args) {
new ShowFileDialog().run();
}
}