Frage

Ich arbeite an einem einfachen Motor 2D-Spiel in Java, und keine Probleme mit FSEM, Pufferstrategien mit, und so weiter; mein Problem ist mit dem Mauszeiger. Im Fenstermodus kann ich das Maus-Cursor, kein Problem, durch die Verwendung setCursor () von meinem JFrame verstecke ein hundert transparent Cursor zu setzen. Doch nach einem Aufruf von device.setFullScreenWindow (diese) in FSEM zu gehen, kommt der Mauszeiger zurück, und nachfolgende Aufrufe von setCursor () es zurück zu meinem leeren Cursor gesetzt haben keine Wirkung. Der Aufruf device.setFullScreenWindow (null) erlaubt es mir loswerden der Cursor wieder zu bekommen -. Es ist nur, während ich in FSEM bin, dass ich es bekommen kann nicht befreien

Ich arbeite unter JDK 6, Zielplattform ist JDK 5 +.

UPDATE: Ich habe einige Tests gemacht, und es sieht aus wie dieses Problem unter MacOS X auftritt 10,5 w / Java 6u7, aber nicht unter Windows XP SP3 mit Java 6u7. Also, es könnte möglicherweise einen Fehler in der Mac-Version der JVM sein.

War es hilfreich?

Lösung 3

Ich glaube, ich habe endlich die Lösung gefunden:

System.setProperty("apple.awt.fullscreenhidecursor","true");

Dies ist eine Apple-proprietäre Systemeigenschaft, die den Mauszeiger versteckt, wenn eine Anwendung im Vollbildmodus befindet. Es ist der einzige Weg, die ich gefunden habe, es zu beheben.

Andere Tipps

Versuchen Sie eine benutzerdefinierten unsichtbare Cursor erstellen:

    Toolkit toolkit = Toolkit.getDefaultToolkit();
    Point hotSpot = new Point(0,0);
    BufferedImage cursorImage = new BufferedImage(1, 1, BufferedImage.TRANSLUCENT); 
    Cursor invisibleCursor = toolkit.createCustomCursor(cursorImage, hotSpot, "InvisibleCursor");        
    setCursor(invisibleCursor);

Ein Entwickler einen Weg gefunden, um es durch einen einen Pixel Cursor aus einem transparenten GIF zu schaffen.

http://sevensoft.livejournal.com/23460.html

Ich weiß, Sie versucht, aber seine speziell die Frage der Vollbild-Modus-Adressierung, genau wie Sie sagen, so vielleicht ist es etwas, was er getan hat, dass Sie nicht haben.

Hier ist, was für mich gearbeitet hat:

Toolkit toolkit = Toolkit.getDefaultToolkit();

// get the smallest valid cursor size
Dimension dim = toolkit.getBestCursorSize(1, 1);

// create a new image of that size with an alpha channel
BufferedImage cursorImg = new BufferedImage(dim.width, dim.height, BufferedImage.TYPE_INT_ARGB);

// get a Graphics2D object to draw to the image
Graphics2D g2d = cursorImg.createGraphics();

// set the background 'color' with 0 alpha and clear the image
g2d.setBackground(new Color(0.0f, 0.0f, 0.0f, 0.0f));
g2d.clearRect(0, 0, dim.width, dim.height);

// dispose the Graphics2D object
g2d.dispose();

// now create your cursor using that transparent image
hiddenCursor = toolkit.createCustomCursor(cursorImg, new Point(0,0), "hiddenCursor");

Zugegeben, ich habe es nicht auf Mac getestet (noch) nicht, nur die Windows. Aber wenn ich die gängigen Methoden verwendet wurde, war ich den Cursor als Black-Box bekommen, so verwende ich den Code über die eine transparente Box erstellen und als die Cursor gesetzt statt. Natürlich müssen Sie die setCursor Methode auf einem AWT Objekt (zB App-Frame) verwenden diese hiddenCursor einzustellen. Hier ist meine hideMouse Methode ( 'de' ist mein Frame):

public void hideMouse(boolean hide) {
    if(hide) {
        fr.setCursor(hiddenCursor);
    } else {
        fr.setCursor(Cursor.getDefaultCursor());
    }
}

Ich weiß nicht, ob dieses Wissen gilt, sondern in einer alten VB6 app Ich hatte das gleiche Problem, und ich habe es los um den Cursor zu bewegen aus dem Bildschirm es einige sehr große Werte zu geben.
Hoffe, es hilft.

Wenn Sie nur unter Windows ausgeführt wird, sieht es aus wie Sie Showcursor (FALSCH) durch JNI aufrufen werden müssen. Zumindest an der Cursor ausblenden komplett zu machen.

Hier ist ein Code, der die 1x1 Cursor erzeugt. Es funktioniert für mich, obwohl ich immer noch einen 1x1 Cursor bekommen.

 Toolkit toolkit = Toolkit.getDefaultToolkit();
 Dimension dim = toolkit.getBestCursorSize(1,1);
 transCursor = toolkit.createCustomCursor(gc.createCompatibleImage(dim.width, dim.height),
     new Point(0, 0), "transCursor");
 ((Component)mainFrame).setCursor(transCursor);

Speziell für Mac Problem, durch JNI können Sie den folgenden verwenden:

Quartz Display Services Referenz - CGDisplayHideCursor

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top