JavaFX Ждите клика где угодно на экране - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть две кнопки: buttonPoint1 и buttonPoint2.
Когда я нажимаю одну из кнопок, она вызывает метод действия для этой кнопки. В этой функции я хочу, чтобы программа ждала, пока я нажму где угодно на экране. Тогда я позвоню MouseInfo.getPointerInfo().getLocation().
Когда я щелкаю за пределами окна своего приложения (например, в другом окне), я теряю фокус на своем приложении. Как заставить программу ждать клика, не скрывать, терять фокус и давать ответ, на который я нажал?

1 Ответ

2 голосов
/ 13 февраля 2020

Одной из идей является использование прозрачного окна, такого как

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        VBox vBox = new VBox(new Label("IMAGINE A BEAUTIFUL APPLICATION HERE"));
        vBox.setAlignment(Pos.CENTER);

        Button button = new Button("Im gonna steal your next click");
        button.setOnAction(event -> {
            System.out.println("Firing Button Action");
            openTransparentWindow();
            System.out.println("Button Action Finished Firing");
        });

        vBox.getChildren().add(button);

        Scene scene = new Scene(vBox, 300, 150);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private void openTransparentWindow(){
        VBox vBox = new VBox();

        Stage stage = new Stage();
        stage.setScene(new Scene(vBox));
        //stage.setOpacity(0.5f); //Uncomment if you want to test and see the stage
        stage.setOpacity(0f);
        stage.setMaximized(true);

        vBox.setOnMouseClicked(event ->{
            System.out.println("event.getX() = " + event.getX());
            System.out.println("event.getY() = " + event.getY());
            System.out.println("event.getScreenX() = " + event.getScreenX());
            System.out.println("event.getScreenY() = " + event.getScreenY());
            stage.close();
        });

        stage.showAndWait();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...