Hello everyone,

I develop cross platform JavaFX applications. On MacOS one of the annoying 
things about JavaFX is that it does not provide a way to add About <<app_name>> 
and Settings… to the application menu bar like the java.awt.Desktop class does 
in Swing.

My proposal is to add similar functionality to JavaFX. I propose adding the 
following to javafx.platform.Application:

   /**
     * Represents an action type. Each platform supports a different set of 
actions.
     *
     * @since JavaFX 24
     */
    public static enum Action {
      /**
       * Represents an AboutHandler.
       */
      APP_ABOUT,

      /**
       * Represents a PreferencesHandler.
       */
      APP_PREFERENCES
    }

    /**
     * Tests whether an action is supported on the current platform.
     *
     * @param action the specified Application.Action
     * @return {@code true} if the specified action is supported on the current 
platform;
     * {@code false} otherwise
     *
     * @since JavaFX 24
     */
    public boolean isSupported(Application.Action action) {
        return PlatformImpl.isActionSupported(action);
    }

    /**
     * Installs a handler to show a custom About window for your application.
     * <p>
     * Setting the AboutHandler to null reverts it to the default behavior.
     *
     * @param handler the handler
     *
     * @throws UnsupportedOperationException - if the current platform does not 
support the
     * Application.Action.APP_ABOUT action
     *
     * @since JavaFX 24
     */
    public void setAboutHandler(AboutHandler handler) {
        PlatformImpl.setAboutHandler(handler);
    }

    /**
     * Installs a handler to show a custom Preferences window for your 
application.
     * <p>
     * Setting the PreferencesHandler to null reverts it to the default 
behavior.
     *
     * @param handler the handler
     *
     * @throws UnsupportedOperationException - if the current platform does not 
support the
     * Application.Action.APP_PREFERENCES action
     *
     * @since JavaFX 24
     */
    public void setPreferencesHandler(PreferencesHandler handler) {
        PlatformImpl.setPreferencesHandler(handler);
    }


AboutHandle and PreferencesHander are functional interfaces added to the 
javafx.application package. They have methods handleAbout() and 
handlePreferences() respectively.

I have implemented the above on my fork of jfx by modifying the PlatformImpl, 
com.sun.glass.ui.Application, and com.sun.glass.ui.MacApplication classes.

What does the mailing list think?

Have a blessed day,



David Kopp

Reply via email to