> On Oct 12, 2024, at 9:35 AM, David Kopp <codebangus...@gmail.com> wrote:
> 
> 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:
> 



> On Oct 12, 2024, at 9:35 AM, David Kopp <codebangus...@gmail.com> wrote:
> 
> 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.
> 

It would be convenient. Recently I wanted to check that I was current with 
Scene Builder, but there was no about item with the version.

I looked at this some time back. 

https://marc.info/?l=openjdk-openjfx-dev&m=167391490829873&w=2

I did this, incomplete as a lot of my stuff is, after the following note.

https://github.com/mik3hall/JavaFXDesktop

On Jan 6, 2023, at 4:35 PM, Michael Hall <mik3h...@gmail.com> wrote:

I haven’t verified if this would further allow changing the java.awt.Desktop 
about handler. 

I did check that custom AboutHandlers are possible for OS/X JavaFX 
applications. 
With…

        static {
                //java.awt.Toolkit.getDefaultToolkit(); // Start AppKit
                Thread t = new Thread(() -> { 
java.awt.Toolkit.getDefaultToolkit(); });
        t.start();  
        }

I made the Application class itself the handler…

public class HelloWorld extends Application implements AboutHandler {

Setting the handler seemed to also need some thread management.

        @Override
        public void init() {
        Thread t = new Thread(() -> {
                        Desktop desktop = Desktop.getDesktop();
                        desktop.setAboutHandler((AboutHandler)this);   
                });
                t.start();                                              
        }

It appeared this could be done in the init or about anywhere in the javaFX 
start method.

The handler I think comes in on the AWT EventQueue so needs to be changed to 
javaFX

    public void handleAbout(AboutEvent evt) {
        System.out.println("got to handleAbout");
        Platform.runLater(() -> {
                Alert alert = new Alert(AlertType.INFORMATION, "About 
HelloWorld");
                        alert.showAndWait();
                });
    }

Checking on Windows 10 VirtualBox it appeared Desktop.Action.APP_ABOUT isn’t 
supported. 
I had trouble with my VirtualBox linux images so didn’t verify there but I’m 
guessing this is viewed as OS/X only and not supported there either.

I never really did determine why javaFX applications are different. My last 
thought had been that they instantiated an NSApplication early so a 
NSApplicationAWT wss never obtained. However, I later thought I saw where I 
passed a check indicating I had to have NSApplicationAWT. With a fix so you get 
the About menu item it seemed a little moot. What I provided for 
ApplicationDelegate seems to be one such fix. You can come up with your own fix 
but I think it will need to done jdk side though to provide this functionality 
to javafx app’s. I might bring this up on the javafx list if the jdk does make 
it possible at some point.

I haven’t looked at any other Desktop functionality for javafx app’s yet having 
no immediate need myself.   

Reply via email to