< prev index next >
src/java.desktop/share/classes/java/awt/Desktop.java
Print this page
*** 20,42 ****
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-
package java.awt;
import java.awt.peer.DesktopPeer;
import java.io.File;
import java.io.FilePermission;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import sun.awt.SunToolkit;
import sun.security.util.SecurityConstants;
/**
* The {@code Desktop} class allows a Java application to launch
* associated applications registered on the native desktop to handle
--- 20,43 ----
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package java.awt;
+ import java.awt.desktop.*;
import java.awt.peer.DesktopPeer;
import java.io.File;
import java.io.FilePermission;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import sun.awt.SunToolkit;
+ import javax.swing.JMenuBar;
import sun.security.util.SecurityConstants;
/**
* The {@code Desktop} class allows a Java application to launch
* associated applications registered on the native desktop to handle
*** 68,77 ****
--- 69,90 ----
*
* <p> Note: when some action is invoked and the associated
* application is executed, it will be executed on the same system as
* the one on which the Java application was launched.
*
+ * <p>
+ * Please note that for Mac OS notifications for
+ * {@link OpenFilesHandler#openFiles(AppEvent.OpenFilesEvent)},
+ * {@link PrintFilesHandler#printFiles(AppEvent.PrintFilesEvent)} )} and
+ * {@link OpenURIHandler#openURI(AppEvent.OpenURIEvent)}
+ * are only sent if the Java app is a bundled application,
+ * with a <code>CFBundleDocumentTypes</code> array present in it's
+ * Info.plist. See the
+ * <a href="http://developer.apple.com/mac/library/documentation/General/Reference/InfoPlistKeyReference">Info.plist
+ * Key Reference</a> for more information about adding a
+ * <code>CFBundleDocumentTypes</code> key to your app's Info.plist.
+ *
* @since 1.6
* @author Armin Chen
* @author George Zhang
*/
public class Desktop {
*** 108,118 ****
MAIL,
/**
* Represents a "browse" action.
* @see Desktop#browse(java.net.URI)
*/
! BROWSE
};
private DesktopPeer peer;
/**
--- 121,248 ----
MAIL,
/**
* Represents a "browse" action.
* @see Desktop#browse(java.net.URI)
*/
! BROWSE,
!
! /**
! * Represents a AppForegroundListener
! * @see java.awt.desktop.AppForegroundListener
! */
! APP_EVENT_FOREGROUND,
!
! /**
! * Represents a AppHiddenListener
! * @see java.awt.desktop.AppHiddenListener
! */
! APP_EVENT_HIDDEN,
!
! /**
! * Represents a AppReopenedListener
! * @see java.awt.desktop.AppReopenedListener
! */
! APP_EVENT_REOPENED,
!
! /**
! * Represents a ScreenSleepListener
! * @see java.awt.desktop.ScreenSleepListener
! */
! APP_EVENT_SCREEN_SLEEP,
!
! /**
! * Represents a SystemSleepListener
! * @see java.awt.desktop.SystemSleepListener
! */
! APP_EVENT_SYSTEM_SLEEP,
!
! /**
! * Represents a UserSessionListener
! * @see java.awt.desktop.UserSessionListener
! */
! APP_EVENT_USER_SESSION,
!
! /**
! * Represents a AboutHandler
! * @see #setAboutHandler(java.awt.desktop.AboutHandler)
! */
! APP_ABOUT,
!
! /**
! * Represents a PreferencesHandler
! * @see #setPreferencesHandler(java.awt.desktop.PreferencesHandler)
! */
! APP_PREFERENCES,
!
! /**
! * Represents a OpenFilesHandler
! * @see #setOpenFileHandler(java.awt.desktop.OpenFilesHandler)
! */
! APP_OPEN_FILE,
!
! /**
! * Represents a PrintFilesHandler
! * @see #setPrintFileHandler(java.awt.desktop.PrintFilesHandler)
! */
! APP_PRINT_FILE,
!
! /**
! * Represents a OpenURIHandler
! * @see #setOpenURIHandler(java.awt.desktop.OpenURIHandler)
! */
! APP_OPEN_URI,
!
! /**
! * Represents a QuitHandler
! * @see #setQuitHandler(java.awt.desktop.QuitHandler)
! */
! APP_QUIT_HANDLER,
!
! /**
! * Represents a QuitStrategy
! * @see #setQuitStrategy(java.awt.desktop.QuitStrategy)
! */
! APP_QUIT_STRATEGY,
!
! /**
! * Represents a SuddenTermination
! * @see #enableSuddenTermination()
! */
! APP_SUDDEN_TERMINATION,
!
! /**
! * Represents a requestForeground
! * @see #requestForeground(boolean)
! */
! APP_REQUEST_FOREGROUND,
!
! /**
! * Represents a HelpViewer
! * @see #openHelpViewer()
! */
! APP_HELP_VIEWER,
!
! /**
! * Represents a menu bar
! * @see #setDefaultMenuBar(javax.swing.JMenuBar)
! */
! APP_MENU_BAR,
!
! /**
! * Represents a platform specific full screen
! * @see #addWindowFullScreenListener(java.awt.Window, java.awt.desktop.FullScreenListener)
! * @see #removeWindowFullScreenListener(java.awt.Window, java.awt.desktop.FullScreenListener)
! * @see #setWindowCanFullScreen(java.awt.Window, boolean)
! * @see #requestToggleFullScreen(java.awt.Window)
! */
! FULLSCREEN,
!
! /**
! * Represents a FileManager
! * @see #getFileManager()
! */
! FILEMANAGER
};
private DesktopPeer peer;
/**
*** 480,485 ****
--- 610,881 ----
if (sm != null) {
sm.checkPermission(new FilePermission("<<ALL FILES>>",
SecurityConstants.FILE_EXECUTE_ACTION));
}
}
+
+ /**
+ * Adds sub-types of {@link SystemEventListener} to listen for notifications
+ * from the native system.
+ *
+ * Has no effect if SystemEventListener's sub-type is unsupported on current
+ * platform.
+ *
+ * @param listener listener
+ * @see AppForegroundListener
+ * @see AppHiddenListener
+ * @see AppReopenedListener
+ * @see ScreenSleepListener
+ * @see SystemSleepListener
+ * @see UserSessionListener
+ */
+ public void addAppEventListener(final SystemEventListener listener) {
+ peer.addAppEventListener(listener);
+ }
+
+ /**
+ * Removes sub-types of {@link SystemEventListener} to listen for notifications
+ * from the native system.
+ *
+ * Has no effect if SystemEventListener's sub-type is unsupported on current
+ * platform.
+ *
+ * @param listener listener
+ * @see AppForegroundListener
+ * @see AppHiddenListener
+ * @see AppReOpenedListener
+ * @see AppScreenSleepListener
+ * @see AppSystemSleepListener
+ * @see AppUserSessionListener
+ */
+ public void removeAppEventListener(final SystemEventListener listener) {
+ peer.removeAppEventListener(listener);
+ }
+
+ /**
+ * Installs a handler to show a custom About window for your application.
+ * <p>
+ * Setting the {@link AboutHandler} to <code>null</code> reverts it to the
+ * default behavior.
+ *
+ * @param aboutHandler the handler to respond to the
+ * {@link AboutHandler#handleAbout} )} message
+ */
+ public void setAboutHandler(final AboutHandler aboutHandler) {
+ checkActionSupport(Action.APP_ABOUT);
+ peer.setAboutHandler(aboutHandler);
+ }
+
+ /**
+ * Installs a handler to show a custom Preferences window for your
+ * application.
+ * <p>
+ * Setting the {@link PreferencesHandler} to <code>null</code> reverts it to
+ * the default behavior
+ *
+ * @param preferencesHandler the handler to respond to the
+ * {@link PreferencesHandler#handlePreferences(PreferencesEvent)}
+ */
+ public void setPreferencesHandler(final PreferencesHandler preferencesHandler) {
+ checkActionSupport(Action.APP_PREFERENCES);
+ peer.setPreferencesHandler(preferencesHandler);
+ }
+
+ /**
+ * Installs the handler which is notified when the application is asked to
+ * open a list of files.
+ *
+ * @param openFileHandler handler
+ */
+ public void setOpenFileHandler(final OpenFilesHandler openFileHandler) {
+ checkActionSupport(Action.APP_OPEN_FILE);
+ peer.setOpenFileHandler(openFileHandler);
+ }
+
+ /**
+ * Installs the handler which is notified when the application is asked to
+ * print a list of files.
+ *
+ * @param printFileHandler handler
+ */
+ public void setPrintFileHandler(final PrintFilesHandler printFileHandler) {
+ checkActionSupport(Action.APP_PRINT_FILE);
+ peer.setPrintFileHandler(printFileHandler);
+ }
+
+ /**
+ * Installs the handler which is notified when the application is asked to
+ * open a URL.
+ *
+ * Setting the handler to <code>null</code> causes all
+ * {@link OpenURIHandler#openURI(AppEvent.OpenURIEvent)} requests to be
+ * enqueued until another handler is set.
+ *
+ * @param openURIHandler handler
+ */
+ public void setOpenURIHandler(final OpenURIHandler openURIHandler) {
+ checkActionSupport(Action.APP_OPEN_URI);
+ peer.setOpenURIHandler(openURIHandler);
+ }
+
+ /**
+ * Installs the handler which determines if the application should quit. The
+ * handler is passed a one-shot {@link QuitResponse} which can cancel or
+ * proceed with the quit. Setting the handler to <code>null</code> causes
+ * all quit requests to directly perform the default {@link QuitStrategy}.
+ *
+ * @param quitHandler the handler that is called when the application is
+ * asked to quit
+ */
+ public void setQuitHandler(final QuitHandler quitHandler) {
+ checkActionSupport(Action.APP_QUIT_HANDLER);
+ peer.setQuitHandler(quitHandler);
+ }
+
+ /**
+ * Sets the default strategy used to quit this application. The default is
+ * calling SYSTEM_EXIT_0.
+ *
+ * @param strategy the way this application should be shutdown
+ */
+ public void setQuitStrategy(final QuitStrategy strategy) {
+ checkActionSupport(Action.APP_QUIT_STRATEGY);
+ peer.setQuitStrategy(strategy);
+ }
+
+ /**
+ * Enables this application to be suddenly terminated.
+ *
+ * Call this method to indicate your application's state is saved, and
+ * requires no notification to be terminated. Letting your application
+ * remain terminatable improves the user experience by avoiding re-paging in
+ * your application when it's asked to quit.
+ *
+ * <b>Note: enabling sudden termination will allow your application to be
+ * quit without notifying your QuitHandler, or running any shutdown
+ * hooks.</b>
+ * E.g. user initiated Cmd-Q, logout, restart, or shutdown requests will
+ * effectively "kill -KILL" your application.
+ *
+ * @see #disableSuddenTermination()
+ */
+ public void enableSuddenTermination() {
+ checkActionSupport(Action.APP_SUDDEN_TERMINATION);
+ peer.enableSuddenTermination();
+ }
+
+ /**
+ * Prevents this application from being suddenly terminated.
+ *
+ * Call this method to indicate that your application has unsaved state, and
+ * may not be terminated without notification.
+ *
+ * @see #enableSuddenTermination()
+ */
+ public void disableSuddenTermination() {
+ checkActionSupport(Action.APP_SUDDEN_TERMINATION);
+ peer.disableSuddenTermination();
+ }
+
+ /**
+ * Requests this application to move to the foreground.
+ *
+ * @param allWindows if all windows of this application should be moved to
+ * the foreground, or only the foremost one
+ */
+ public void requestForeground(final boolean allWindows) {
+ checkActionSupport(Action.APP_REQUEST_FOREGROUND);
+ peer.requestForeground(allWindows);
+ }
+
+ /**
+ * Opens the native help viewer application.
+ */
+ public void openHelpViewer() {
+ checkActionSupport(Action.APP_HELP_VIEWER);
+ peer.openHelpViewer();
+ }
+
+ /**
+ * Sets the default menu bar to use when there are no active frames.
+ *
+ * Note, Aqua Look and Feel should be active to support this on Mac OS.
+ *
+ * @param menuBar to use when no other frames are active
+ */
+ public void setDefaultMenuBar(final JMenuBar menuBar) {
+ checkActionSupport(Action.APP_MENU_BAR);
+ peer.setDefaultMenuBar(menuBar);
+ }
+
+ /**
+ * Attaches a {@link FullScreenListener} to the specified top-level
+ * {@link Window}.
+ *
+ * @param window to attach the {@link FullScreenListener} to
+ * @param listener to be notified when a full screen event occurs
+ * @throws IllegalArgumentException if window is not a
+ * {@link RootPaneContainer}
+ */
+ public void addWindowFullScreenListener(final Window window,
+ final FullScreenListener listener) {
+ checkActionSupport(Action.FULLSCREEN);
+ peer.addWindowFullScreenListener(window, listener);
+ }
+
+ /**
+ * Removes a {@link FullScreenListener} from the specified top-level
+ * {@link Window}.
+ *
+ * @param window to remove the {@link FullScreenListener} from
+ * @param listener to be removed
+ * @throws IllegalArgumentException if window is not a
+ * {@link RootPaneContainer}
+ */
+ public void removeWindowFullScreenListener(final Window window,
+ final FullScreenListener listener) {
+ checkActionSupport(Action.FULLSCREEN);
+ peer.removeWindowFullScreenListener(window, listener);
+ }
+
+ /**
+ * Marks a {@link Window} as able to animate into or out of full screen
+ * mode.
+ *
+ * Only top-level {@link Window}s which are {@link RootPaneContainer}s are
+ * able to be animated into and out of full screen mode. The {@link Window}
+ * must be marked as full screen-able before the native peer is created with
+ * {@link Component#addNotify()}.
+ *
+ * @param window window
+ * @param canFullScreen flag
+ * @throws IllegalArgumentException if window is not a
+ * {@link RootPaneContainer}
+ */
+ public void setWindowCanFullScreen(final Window window, final boolean canFullScreen) {
+ checkActionSupport(Action.FULLSCREEN);
+ peer.setWindowCanFullScreen(window, canFullScreen);
+ }
+
+ /**
+ * Requests that a {@link Window} should get into or out of full screen
+ * mode. Only {@link Window}s marked as full screenable by
+ * {@link #setWindowCanFullScreen(Window, boolean)} can be toggled.
+ *
+ * @param window to animate into or out of full screen mode
+ */
+ public void requestToggleFullScreen(final Window window) {
+ checkActionSupport(Action.FULLSCREEN);
+ peer.requestToggleFullScreen(window);
+ }
+
+ /**
+ * Returns the mac specific FileManager.
+ * @return FileManager
+ * @see FileManager
+ */
+ public FileManager getFileManager() {
+ checkActionSupport(Action.FILEMANAGER);
+ return peer.getFileManager();
+ }
+
}
< prev index next >