/*
* Enhydra Java Application Server Project
*
* The contents of this file are subject to the Enhydra Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License on
* the gEnhydra web site ( http://www.enhydra.org/ ).
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
* the License for the specific terms governing rights and limitations
* under the License.
*
* The Initial Developer of the Enhydra Application Server is Lutris
* Technologies, Inc. The Enhydra Application Server and portions created
* by Lutris Technologies, Inc. are Copyright Lutris Technologies, Inc.
* All Rights Reserved.
*
* Contributor(s):
* Paul Mahar
* Thomas Wessell
*
*/
//
import javax.swing.JFileChooser;
import javax.swing.UIManager;
import java.awt.Dialog;
import java.awt.Frame;
import java.awt.Window;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Toolkit;
import java.io.File;
import javax.swing.filechooser.FileFilter;
import java.util.ResourceBundle;
/**
* SwingUtil contains static utility methods for working with Swing
* classes.
*
*/
public class SwingUtil {
/**
* Hidden default constructor
*/
private SwingUtil() {}
/**
* Open a JFileChooser dialog for selecting a directory and return the
* selected directory.
*
* @param owner
* The frame or dialog that controls the invokation of this dialog.
* @param defaultDir
* A string representation of the directory to show when the
* dialog opens.
* @param title
* Tile for the dialog.
*
* @return
* The selected directory as a File. Null if user cancels dialog without
* a selection.
*
*/
public static File getDirectoryChoice(Component owner, String defaultDir,
String title) {
return getDirectoryChoice(owner, new File(defaultDir), title);
}
/**
* Open a JFileChooser dialog for selecting a directory and return the
* selected directory.
*
*
* @param owner
* The frame or dialog that controls the invokation of this dialog.
* @param defaultDir
* The directory to show when the dialog opens.
* @param title
* Tile for the dialog.
*
* @return
* The selected directory as a File. Null if user cancels dialog without
* a selection.
*
*/
public static File getDirectoryChoice(Component owner, File defaultDir,
String title) {
//
// There is apparently a bug in the native Windows FileSystem class that
// occurs when you use a file chooser and there is a security manager
// active. An error dialog is displayed indicating there is no disk in
// Drive A:. To avoid this, the security manager is temporarily set to
// null and then reset after the file chooser is closed.
//
SecurityManager sm = null;
JFileChooser chooser = null;
File choice = null;
sm = System.getSecurityManager();
System.setSecurityManager(null);
chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
if ((defaultDir != null) && defaultDir.exists()
&& defaultDir.isDirectory()) {
chooser.setCurrentDirectory(defaultDir);
chooser.setSelectedFile(defaultDir);
}
chooser.setDialogTitle(title);
chooser.setApproveButtonText("OK");
int v = chooser.showOpenDialog(owner);
owner.requestFocus();
switch (v) {
case JFileChooser.APPROVE_OPTION:
if (chooser.getSelectedFile() != null) {
if (chooser.getSelectedFile().exists()) {
choice = chooser.getSelectedFile();
} else {
File parentFile =
new File(chooser.getSelectedFile().getParent());
choice = parentFile;
}
}
break;
case JFileChooser.CANCEL_OPTION:
case JFileChooser.ERROR_OPTION:
}
chooser.removeAll();
chooser = null;
System.setSecurityManager(sm);
return choice;
}
/**
* Get a file selection using the FileChooser dialog.
*
* @param owner
* The parent of this modal dialog.
* @param defaultSelection
* The default file selection as a string.
* @param filter
* An extension filter
* @param title
* The caption for the dialog.
*
* @return
* A selected file or null if no selection is made.
*/
public static File getFileChoice(Component owner,
String defaultSelection,
FileFilter filter, String title) {
return SwingUtil.getFileChoice(owner, new File(defaultSelection),
filter, title);
}
/**
* Get a file selection using the FileChooser dialog.
*
* @param owner
* The parent of this modal dialog.
* @param defaultSelection
* The default file selection as a file.
* @param filter
* An extension filter
* @param title
* The caption for the dialog.
*
* @return
* A selected file or null if no selection is made.
*/
public static File getFileChoice(Component owner, File defaultSelection,
FileFilter filter, String title) {
//
// There is apparently a bug in the native Windows FileSystem class that
// occurs when you use a file chooser and there is a security manager
// active. An error dialog is displayed indicating there is no disk in
// Drive A:. To avoid this, the security manager is temporarily set to
// null and then reset after the file chooser is closed.
//
SecurityManager sm = null;
File choice = null;
JFileChooser chooser = null;
sm = System.getSecurityManager();
System.setSecurityManager(null);
chooser = new JFileChooser();
if (defaultSelection.isDirectory()) {
chooser.setCurrentDirectory(defaultSelection);
} else {
chooser.setSelectedFile(defaultSelection);
}
chooser.setFileFilter(filter);
chooser.setDialogTitle(title);
chooser.setApproveButtonText("OK");
int v = chooser.showOpenDialog(owner);
owner.requestFocus();
switch (v) {
case JFileChooser.APPROVE_OPTION:
if (chooser.getSelectedFile() != null) {
choice = chooser.getSelectedFile();
}
break;
case JFileChooser.CANCEL_OPTION:
case JFileChooser.ERROR_OPTION:
}
chooser.removeAll();
chooser = null;
System.setSecurityManager(sm);
return choice;
}
/**
* Get the point on point on the screen at which to open a dialog
* or window for it to appear centered. This point is the top right hand
* corner of the container you want to position.
*
*
* @param size
* The demensions of the dialog or window to position.
*
* @return
* The top left hand point at which to position the container
* for it to appear centered.
*
*/
public static Point getCenteringPoint(Dimension size) {
Point centeringPoint = new Point();
Dimension screenSize;
screenSize = Toolkit.getDefaultToolkit().getScreenSize();
if (size.height > screenSize.height) {
size.height = screenSize.height;
}
if (size.width > screenSize.width) {
size.width = screenSize.width;
}
centeringPoint.x = (screenSize.width - size.width) / 2;
centeringPoint.y = (screenSize.height - size.height) / 2;
return centeringPoint;
}
}