2 votes

JavaFX Comment positionner la souris

J'essaie de faire un petit jeu et dans la plupart des jeux, la souris se bloque au centre de l'écran. Est-il possible de serrure la souris au centre de l'écran ou fixer la position de la souris en JavaFX ? Je sais qu'il est possible de le faire, et je connais aussi quelques exemples écrits en LWJGL ou simplement avec le package AWT/SWING.

Merci de votre aide.

0voto

GOXR3PLUS Points 3060

Voici le code dont vous avez besoin :

import java.awt.AWTException;
import java.awt.Robot;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Cursor;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Screen;
import javafx.stage.Stage;

public class MoveCursor extends Application {

Scene scene;
VBox container;
Button moveMouse;
Button showHideCursor;
public static int screenWidth = (int) Screen.getPrimary().getBounds().getWidth();
public static int screenHeight = (int) Screen.getPrimary().getBounds().getHeight();

@Override
public void start(Stage stage) throws Exception {

    // MoveMouse Button
    moveMouse = new Button("Move Cursor to the center of Screen");
    moveMouse.setOnAction(m -> {
        moveCursor(screenWidth/2, screenHeight/2);
    });

    // ShowHide Cursor
    showHideCursor = new Button("Show/Hide Cursor");
    showHideCursor.setCursor(Cursor.HAND);
    showHideCursor.setOnAction(m -> {
        if (scene.getCursor() != Cursor.NONE)
            scene.setCursor(Cursor.NONE);
        else
            scene.setCursor(Cursor.DEFAULT);
    });

    // Container
    container = new VBox();
    container.getChildren().addAll(moveMouse, showHideCursor);

    // Scene
    scene = new Scene(container, 500, 500);

    stage.setScene(scene);
    stage.show();
}

/**
 * Move the mouse to the specific screen position
 * 
 * @param x
 * @param y
 */
public void moveCursor(int screenX, int screenY) {
    Platform.runLater(() -> {
        try {
            Robot robot = new Robot();
            robot.mouseMove(screenX, screenY);
        } catch (AWTException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    });
}

public static void main(String[] args) {
    launch(args);
}

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X