Question

Je travaille sur un simple moteur de jeu 2D en Java et je n’éprouve aucun problème avec FSEM, les stratégies de tampon, etc. mon problème est avec le curseur de la souris. En mode fenêtré, je peux masquer le curseur de la souris sans problème en utilisant setCursor () depuis mon JFrame pour définir un curseur entièrement transparent. Toutefois, après un appel à device.setFullScreenWindow (this) pour accéder à FSEM, le curseur de la souris revient et les appels suivants à setCursor () pour le redéfinir sur mon curseur vide sont sans effet. L'appel de device.setFullScreenWindow (null) me permet de supprimer à nouveau le curseur. Ce n'est que lorsque je suis dans FSEM que je ne peux pas m'en débarrasser.

Je travaille sous JDK 6, la plate-forme cible est JDK 5 +.

UPDATE: : j'ai effectué d'autres tests et il semble que ce problème se produise sous MacOS X 10.5 avec Java 6u7, mais pas sous Windows XP SP3 avec Java 6u7. Il pourrait donc s'agir d'un bogue dans la version Mac de la machine virtuelle.

Était-ce utile?

La solution 3

Je pense avoir enfin trouvé la solution:

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

Il s'agit d'une propriété système appartenant à Apple qui masque le curseur de la souris lorsqu'une application est en mode plein écran. C’est le seul moyen que j’ai trouvé pour le réparer.

Autres conseils

Essayez de créer un curseur invisible personnalisé:

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

Un développeur a trouvé un moyen de contourner le problème en créant un curseur d'un pixel à partir d'un fichier GIF transparent.

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

Je sais que vous avez essayé cela, mais le sien aborde spécifiquement la question du mode plein écran, exactement comme vous le dites, alors peut-être qu'il a fait quelque chose que vous n'avez pas fait.

Voici ce qui fonctionne pour moi:

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

Certes, je ne l’ai pas encore testé sur Mac, seulement sous Windows. Mais lorsque j’utilisais les méthodes courantes, le curseur devenait une boîte noire, j’utilisais donc le code situé au-dessus de celui-ci pour créer une boîte transparente et le définir comme curseur. Bien sûr, vous devez utiliser la méthode setCursor sur un objet AWT (tel que le cadre de votre application) pour définir ce hiddenCursor. Voici ma méthode hideMouse ('fr' est mon cadre):

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

Je ne sais pas si cette connaissance s'applique, mais dans une ancienne application VB6, je rencontrais le même problème et je me suis débarrassé de le déplacer du curseur de l'écran en lui donnant de très grandes valeurs.
J'espère que ça aide.

Si vous utilisez uniquement Windows, vous devez appeler ShowCursor (FALSE) via JNI. Au moins, pour que le curseur se cache complètement.

Voici un code qui crée le curseur 1x1. Cela fonctionne pour moi, même si j'ai toujours un curseur 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);

Spécifiquement pour votre problème Mac, via JNI, vous pouvez utiliser les éléments suivants:

Options de référence des services d'affichage - CGDisplayHideCursor

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top