Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Make JavaFX window active

Tags:

javafx

I am trying to make a JavaFX application (running in the background to show up (set visible)) by a specific keystroke and to make the window the active window immediately. Therefore I set the primary stage alwaysOnTop-property true, call stage.toFront() and finally call stage.requestFocus(). Afterwards I request focus for a text field. When the window is made visible I would like to instantly start typing into the text field.

However, when I for example have a Ubuntu-terminal selected and make the window visible and start typing, the application is shown on top of everything, however, the typing goes to the terminal. The application window is not active! Nevertheless, the focused property of the stage is true. Is that a bug or am I missing something? Is it OS related?


Edit: I am willed to give my little hack-around for this problem that I am using at the moment, because the internet is suggesting, that a lot of people are facing this problem: Since I am working on a linux maschine I have access to the wonderful tool wmctrl. It is part of most standard repositories. wmctrl -a WINDOWNAME sets the window with the name WINDOWNAME active. For now, I simply call this tool from my source code when I need the window to be active. Since this is more of a dirty hack than any thing else, I sure want to get rid of it.

like image 202
smoes Avatar asked Oct 19 '25 06:10

smoes


1 Answers

Not perfect, but it works:

Platform.runLater(() ->
{
    //primaryStage.setAlwaysOnTop(true);
    //primaryStage.setAlwaysOnTop(false);
    primaryStage.setIconified(true);
    primaryStage.setIconified(false);
});
like image 89
Eng.Fouad Avatar answered Oct 22 '25 04:10

Eng.Fouad