/* * @(#)FileDialog.java 1.53 03/12/19 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package java.awt; import java.awt.peer.FileDialogPeer; import java.io.FilenameFilter; import java.io.IOException; import java.io.ObjectInputStream; /** * The FileDialog class displays a dialog window * from which the user can select a file. *

* Since it is a modal dialog, when the application calls * its show method to display the dialog, * it blocks the rest of the application until the user has * chosen a file. * * @see Window#show * * @version 1.53, 12/19/03 * @author Sami Shaio * @author Arthur van Hoff * @since JDK1.0 */ public class FileDialog extends Dialog { /** * This constant value indicates that the purpose of the file * dialog window is to locate a file from which to read. */ public static final int LOAD = 0; /** * This constant value indicates that the purpose of the file * dialog window is to locate a file to which to write. */ public static final int SAVE = 1; /* * There are two FileDialog modes: LOAD and * SAVE. * This integer will represent one or the other. * If the mode is not specified it will default to LOAD. * * @serial * @see getMode() * @see setMode() * @see java.awt.FileDialog#LOAD * @see java.awt.FileDialog#SAVE */ int mode; /* * The string specifying the directory to display * in the file dialog. This variable may be null. * * @serial * @see getDirectory() * @see setDirectory() */ String dir; /* * The string specifying the initial value of the * filename text field in the file dialog. * This variable may be null. * * @serial * @see getFile() * @see setFile() */ String file; /* * The filter used as the file dialog's filename filter. * The file dialog will only be displaying files whose * names are accepted by this filter. * This variable may be null. * * @serial * @see #getFilenameFilter() * @see #setFilenameFilter() * @see FileNameFilter */ FilenameFilter filter; private static final String base = "filedlg"; private static int nameCounter = 0; /* * JDK 1.1 serialVersionUID */ private static final long serialVersionUID = 5035145889651310422L; static { /* ensure that the necessary native libraries are loaded */ Toolkit.loadLibraries(); if (!GraphicsEnvironment.isHeadless()) { initIDs(); } } /** * Initialize JNI field and method IDs for fields that may be accessed from C. */ private static native void initIDs(); /** * Creates a file dialog for loading a file. The title of the * file dialog is initially empty. This is a convenience method for * FileDialog(parent, "", LOAD). * * @param parent the owner of the dialog * @since JDK1.1 */ public FileDialog(Frame parent) { this(parent, "", LOAD); } /** * Creates a file dialog window with the specified title for loading * a file. The files shown are those in the current directory. * This is a convenience method for * FileDialog(parent, title, LOAD). * * @param parent the owner of the dialog * @param title the title of the dialog */ public FileDialog(Frame parent, String title) { this(parent, title, LOAD); } /** * Creates a file dialog window with the specified title for loading * or saving a file. *

* If the value of mode is LOAD, then the * file dialog is finding a file to read, and the files shown are those * in the current directory. If the value of * mode is SAVE, the file dialog is finding * a place to write a file. * * @param parent the owner of the dialog * @param title the title of the dialog * @param mode the mode of the dialog; either * FileDialog.LOAD or FileDialog.SAVE * @exception IllegalArgumentException if an illegal file * dialog mode is supplied * @see java.awt.FileDialog#LOAD * @see java.awt.FileDialog#SAVE */ public FileDialog(Frame parent, String title, int mode) { super(parent, title, true); this.setMode(mode); setLayout(null); } /** * Creates a file dialog for loading a file. The title of the * file dialog is initially empty. This is a convenience method for * FileDialog(parent, "", LOAD). * * @param parent the owner of the dialog * @exception java.lang.IllegalArgumentException if the parent's * GraphicsConfiguration * is not from a screen device; * @exception java.lang.IllegalArgumentException if parent * is null; this exception is always thrown when * GraphicsEnvironment.isHeadless * returns true * @see java.awt.GraphicsEnvironment#isHeadless * @since 1.5 */ public FileDialog(Dialog parent) { this(parent, "", LOAD); } /** * Creates a file dialog window with the specified title for loading * a file. The files shown are those in the current directory. * This is a convenience method for * FileDialog(parent, title, LOAD). * * @param parent the owner of the dialog * @param title the title of the dialog; a null value * will be accepted without causing a * NullPointerException to be thrown * @exception java.lang.IllegalArgumentException if the parent's * GraphicsConfiguration * is not from a screen device; * @exception java.lang.IllegalArgumentException if parent * is null; this exception is always thrown when * GraphicsEnvironment.isHeadless * returns true * @see java.awt.GraphicsEnvironment#isHeadless * @since 1.5 */ public FileDialog(Dialog parent, String title) { this(parent, title, LOAD); } /** * Creates a file dialog window with the specified title for loading * or saving a file. *

* If the value of mode is LOAD, then the * file dialog is finding a file to read, and the files shown are those * in the current directory. If the value of * mode is SAVE, the file dialog is finding * a place to write a file. * * @param parent the owner of the dialog * @param title the title of the dialog; a null value * will be accepted without causing a * NullPointerException to be thrown * @param mode the mode of the dialog; either * FileDialog.LOAD or FileDialog.SAVE * @exception java.lang.IllegalArgumentException if an illegal * file dialog mode is supplied; * @exception java.lang.IllegalArgumentException if the parent's * GraphicsConfiguration * is not from a screen device; * @exception java.lang.IllegalArgumentException if parent * is null; this exception is always thrown when * GraphicsEnvironment.isHeadless * returns true * @see java.awt.GraphicsEnvironment#isHeadless * @see java.awt.FileDialog#LOAD * @see java.awt.FileDialog#SAVE * @since 1.5 */ public FileDialog(Dialog parent, String title, int mode) { super(parent, title, true); this.setMode(mode); setLayout(null); } /** * Constructs a name for this component. Called by getName() * when the name is null. */ String constructComponentName() { synchronized (getClass()) { return base + nameCounter++; } } /** * Creates the file dialog's peer. The peer allows us to change the look * of the file dialog without changing its functionality. */ public void addNotify() { synchronized(getTreeLock()) { if (parent != null && parent.getPeer() == null) { parent.addNotify(); } if (peer == null) peer = getToolkit().createFileDialog(this); super.addNotify(); } } /** * Indicates whether this file dialog box is for loading from a file * or for saving to a file. * * @return the mode of this file dialog window, either * FileDialog.LOAD or * FileDialog.SAVE * @see java.awt.FileDialog#LOAD * @see java.awt.FileDialog#SAVE * @see java.awt.FileDialog#setMode */ public int getMode() { return mode; } /** * Sets the mode of the file dialog. If mode is not * a legal value, an exception will be thrown and mode * will not be set. * * @param mode the mode for this file dialog, either * FileDialog.LOAD or * FileDialog.SAVE * @see java.awt.FileDialog#LOAD * @see java.awt.FileDialog#SAVE * @see java.awt.FileDialog#getMode * @exception IllegalArgumentException if an illegal file * dialog mode is supplied * @since JDK1.1 */ public void setMode(int mode) { switch (mode) { case LOAD: case SAVE: this.mode = mode; break; default: throw new IllegalArgumentException("illegal file dialog mode"); } } /** * Gets the directory of this file dialog. * * @return the (potentially null or invalid) * directory of this FileDialog * @see java.awt.FileDialog#setDirectory */ public String getDirectory() { return dir; } /** * Sets the directory of this file dialog window to be the * specified directory. Specifying a null or an * invalid directory implies an implementation-defined default. * This default will not be realized, however, until the user * has selected a file. Until this point, getDirectory() * will return the value passed into this method. *

* Specifying "" as the directory is exactly equivalent to * specifying null as the directory. * * @param dir the specified directory * @see java.awt.FileDialog#getDirectory */ public void setDirectory(String dir) { this.dir = (dir != null && dir.equals("")) ? null : dir; FileDialogPeer peer = (FileDialogPeer)this.peer; if (peer != null) { peer.setDirectory(this.dir); } } /** * Gets the selected file of this file dialog. If the user * selected CANCEL, the returned file is null. * * @return the currently selected file of this file dialog window, * or null if none is selected * @see java.awt.FileDialog#setFile */ public String getFile() { return file; } /** * Sets the selected file for this file dialog window to be the * specified file. This file becomes the default file if it is set * before the file dialog window is first shown. *

* Specifying "" as the file is exactly equivalent to specifying * null * as the file. * * @param file the file being set * @see java.awt.FileDialog#getFile */ public void setFile(String file) { this.file = (file != null && file.equals("")) ? null : file; FileDialogPeer peer = (FileDialogPeer)this.peer; if (peer != null) { peer.setFile(this.file); } } /** * Determines this file dialog's filename filter. A filename filter * allows the user to specify which files appear in the file dialog * window. Filename filters do not function in Sun's reference * implementation for Microsoft Windows. * * @return this file dialog's filename filter * @see java.io.FilenameFilter * @see java.awt.FileDialog#setFilenameFilter */ public FilenameFilter getFilenameFilter() { return filter; } /** * Sets the filename filter for this file dialog window to the * specified filter. * Filename filters do not function in Sun's reference * implementation for Microsoft Windows. * * @param filter the specified filter * @see java.io.FilenameFilter * @see java.awt.FileDialog#getFilenameFilter */ public synchronized void setFilenameFilter(FilenameFilter filter) { this.filter = filter; FileDialogPeer peer = (FileDialogPeer)this.peer; if (peer != null) { peer.setFilenameFilter(filter); } } /** * Reads the ObjectInputStream and performs * a backwards compatibility check by converting * either a dir or a file * equal to an empty string to null. * * @param s the ObjectInputStream to read */ private void readObject(ObjectInputStream s) throws ClassNotFoundException, IOException { s.defaultReadObject(); // 1.1 Compatibility: "" is not converted to null in 1.1 if (dir != null && dir.equals("")) { dir = null; } if (file != null && file.equals("")) { file = null; } } /** * Returns a string representing the state of this FileDialog * window. This method is intended to be used only for debugging purposes, * and the content and format of the returned string may vary between * implementations. The returned string may be empty but may not be * null. * * @return the parameter string of this file dialog window */ protected String paramString() { String str = super.paramString(); str += ",dir= " + dir; str += ",file= " + file; return str + ((mode == LOAD) ? ",load" : ",save"); } boolean postsOldMouseEvents() { return false; } }