Domanda

Sto lavorando su un semplice motore di gioco 2D in Java e non ho problemi con FSEM, strategie di buffer e così via; il mio problema è con il cursore del mouse. In modalità finestra, posso nascondere il cursore del mouse, nessun problema, usando setCursor () dal mio JFrame per impostare un cursore completamente trasparente. Tuttavia, dopo una chiamata a device.setFullScreenWindow (questa) per accedere a FSEM, il cursore del mouse ritorna e le successive chiamate a setCursor () per riportarlo sul mio cursore vuoto non hanno alcun effetto. Chiamare device.setFullScreenWindow (null) mi permette di liberarmi di nuovo del cursore - solo quando sono in FSEM non riesco a liberarmene.

Sto lavorando con JDK 6, la piattaforma target è JDK 5+.

AGGIORNAMENTO: ho fatto qualche altro test e sembra che questo problema si verifichi con MacOS X 10.5 con Java 6u7, ma non con Windows XP SP3 con Java 6u7. Quindi, potrebbe essere un bug nella versione Mac di JVM.

È stato utile?

Soluzione 3

Penso di aver finalmente trovato la soluzione:

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

Questa è una proprietà di sistema proprietaria di Apple che nasconde il cursore del mouse quando un'applicazione è in modalità a schermo intero. È l'unico modo che ho trovato per risolverlo.

Altri suggerimenti

Prova a creare un cursore invisibile personalizzato:

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

Uno sviluppatore ha trovato un modo per aggirarlo creando un cursore di un pixel da una GIF trasparente.

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

So che ci hai provato, ma il suo sta affrontando specificamente il problema della modalità a schermo intero, esattamente come dici tu, quindi forse c'è qualcosa che ha fatto che non hai fatto.

Ecco cosa ha funzionato per me:

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

Certo, non l'ho ancora testato su Mac (ancora), solo su Windows. Ma quando ho usato i metodi comuni stavo ottenendo il cursore come scatola nera, quindi uso il codice sopra per creare una casella trasparente e impostarlo come cursore. Ovviamente devi usare il metodo setCursor su un oggetto AWT (come Frame dell'app) per impostare questo cursore nascosto. Ecco il mio metodo hideMouse ('fr' is my Frame):

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

Non so se questa conoscenza si applica, ma in una vecchia app VB6 ho avuto lo stesso problema e mi sono liberato di esso spostando il cursore fuori dallo schermo dandogli alcuni valori molto grandi.
Spero che sia d'aiuto.

Se stai eseguendo solo su Windows, sembra che dovrai chiamare ShowCursor (FALSE) tramite JNI. Almeno, per nascondere il cursore completo.

Ecco del codice che crea il cursore 1x1. Funziona per me, anche se ho ancora un cursore 1x1.

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

In particolare per il tuo problema con il Mac, tramite JNI puoi utilizzare quanto segue:

Quartz Riferimenti ai servizi di visualizzazione - CGDisplayHideCursor

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top