2016-05-28 17 views
2

Ich versuche, ein kleines Spiel zu machen und in den meisten Spielen wird die Maus in der Mitte des Bildschirms gesperrt. Also, ist es möglich, Sperre die Maus in der Mitte des Bildschirms oder die Position der Maus in JavaFX zu sperren? Ich weiß, dass es möglich ist, und ich kenne auch einige Beispiele, die in LWJGL oder nur mit dem AWT/SWING-Paket geschrieben wurden.JavaFX Wie man die Maus positioniert

Danke für Hilfe.

+0

1) In Swing Sie dies mit Roboter tun können, hier ein Beispiel: http: //programmersheaven.com/discussion/306819/can-i-move- cursor-in-java 2) Vielleicht ist es eine Lösung für Sie, die Maus transparent zu machen? – GOXR3PLUS

+0

Ich bin auf der Suche nach genau das gleiche, bitte teilen Sie eine Lösung, wenn Sie eine gefunden haben –

+0

@ GoXr3Plus Vielen Dank für Ihre Antwort, aber leider ist die MouseTransparency nicht das, was ich suche. – MrMechanik

Antwort

0

Hier ist der Code, den Sie benötigen:

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); 
} 

} 
+0

genial! Ich wusste nicht, dass du AWT in FX verwenden kannst. Ich danke dir sehr! – MrMechanik

+0

JavaFX fehlt (vorerst) einige grundlegende Dinge (zB Robot und ImageIO), die AWT hat. Versuchen Sie im Allgemeinen zu vermeiden, diese beiden zu mischen, da sie in verschiedenen Threads laufen und Probleme verursachen können ... Deshalb verwende ich Platform. runLater im Beispiel() .. – GOXR3PLUS

Verwandte Themen