IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaFX Discussion :

Affichage d'un curseur


Sujet :

JavaFX

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 91
    Par défaut Affichage d'un curseur
    Hello

    J'essaye d'afficher un curseur autre que la flèche standard, avec le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    public class CdmrailMain extends Application {
     
    	public static void main(String[] args) {
     
    		// C'est ici que tout démarre
    		// C'est le seul code qui doit être présent ici
    		Application.launch(args);
    	}
     
    	@Override
    	// Surcharge de la méthode start()
    	// Point d'entrée de l'application
    	public void start(Stage cdmrailMain) {
     
    //		cdmRailMain.setX(CdmrailGlobal.getSecondaryScreen().getBounds().getMinX());
    //		cdmRailMain.setY(CdmrailGlobal.getSecondaryScreen().getBounds().getMinY());
     
    		// Noeud racine (Root Node) de la Scene, départ pour tous les composants de la fenêtre principale
    //		StackPane cdmrailMainRoot = new StackPane();
    		CdmrailMainRoot mainRoot = new CdmrailMainRoot();
    //		BorderPane cdmRailMainRoot = new BorderPane();
     
    		// Crée une Scene avec cdmRailRoot comme Root Node
    		// Containeur des composants affichés dans la fenêtre
    //		Scene cdmrailMainScene = new Scene(cdmrailMainRoot);
    		Scene cdmrailMainScene = new Scene(mainRoot);
     
    Cursor theCursor = Cursor.cursor("WAIT");
    cdmrailMainScene.setCursor(theCursor);
     
    		// Titre de la fenêtre principale
    		cdmrailMain.setTitle(CdmrailGlobal.getCdmrailVersion());
     
    		// La Scene associée
    		cdmrailMain.setScene(cdmrailMainScene);
     
    		// Pour redimensionner la fenêtre
    		cdmrailMain.setResizable(true);
     
    		// Impose une taille minimum
    		cdmrailMain.setMinWidth(400);
    		cdmrailMain.setMinHeight(300);
     
    		// Démarre en taille maxi
    		cdmrailMain.setMaximized(true);
     
    		// Affiche la fenêtre et son contenu
    		cdmrailMain.show();
    	}
     
    }
    Mais j'ai toujours la flèche standard quelque soit le curseur positionné

    Merci pour l'aide

    Louis

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 943
    Billets dans le blog
    54
    Par défaut
    Alors, en remplaçant la classe CdmrailMainRoot par un simple Pane pour le test et en mettant une chaine de characteres bidon pour le titre de la fenetre :

    • Sous Windows 11, avec JDK 27 + JavaFX 27, le curseur d'attente s'affiche bien (une roue animée bleue sous Windows 11).
    • Sous Ubuntu 22 (dans Virtual Box), avec JDK 20 + JavaFX, 20 (pas le temps de creer une VM avec un stack plus recent), le curseur d'attente s'affiche bien (un cercle noir avec une animation interne dans cette version).
    • Sous macOS 15.7.9 (x86, affichage a distance via Remmina mais j'ai aussi été plusieurs fois vérifier directement sur le mac Mini), avec JDK 25 + JavaFX 25, le curseur ne change pas de forme.


    J'ai aussi teste plusieurs autres curseurs via les constantes de la classe Cursor et le soucis est le meme. Donc, je dirai que le soucis vient de macOS.
    Il y a qq topics sur des sujets similaires sur StackOverflow mais c'est souvent assez ancien et ca ne colle pas tout a fait avec ce soucis-la.

    Je vois que Gluon propose le JavaFX SDK 27 pour macOS x86 mais du cote de l'OpenJDK le JDK 27 est pas dispo pour x86, idem pour Oracle. Je vais devoir peut-être installer temporairement un JDK tiers ou basculer JavaFX 27 sur le JDK 25 pour ces tests.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 943
    Billets dans le blog
    54
    Par défaut
    Alors toujours sur macOS x86, bell-sw Liberica JDK 27.0.1.0.3 + JavaFX 27.0.1 et... meme résultat.

    J'ai aussi testé en mettant un curseur customisé généré a partir d'un PNG et ca fonctionne sans soucis sous Windows et Linux et bien sur toujours rien sous macOS.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    final var image = new Image(getClass().getResource("cursor.png").toExternalForm());
            Cursor theCursor = new ImageCursor(image, image.getWidth()/2, image.getHeight()/2);
            cdmrailMainScene.setCursor(theCursor);
    J'ai été regarder du coté de la Java Bug Database sans rien trouver de bien concluant.
    Il y a également ce bug dans le tracker de l'OpenJDK.
    Ce qui est d'autant plus ennuyant que d’expérience je sais que pas mal de gens de chez Oracle et des développeurs du JDK / JavaFX sont sous macOS...

    Bref, je vois pas trop quoi faire d'autre, a part fouiller encore plus pour voir si ce soucis a été détecté et ensuite soumettre un bug report chez Oracle qui pourrait mettre des années avant d’être corrigé.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 91
    Par défaut
    Hello

    C'est bien ennuyeux
    Est-ce qu'il y a moyen de simuler un curseur ?
    Il va bien falloir trouver une solution
    Mon Mac tourne avec une puce M1 Max
    Encore merci pour ton aide

    Louis

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 943
    Billets dans le blog
    54
    Par défaut
    J'aurais dit en utilisant Cursor.NONE, mais ca reste inutile si la version macOS ne prend pas le changement en compte. Ou alors en mettant un pointeur customisé doté d'un PNG vide, mais si la version macOS ne prend aucun curseur customisé comme ce que j'ai tester hier, c'est mal barre

    En faisant plus de tests sous macOS, j'ai pu brièvement corriger le soucis en déportant l'initialisation du pointeur sur le JavaFX Application Thread en faisant a la fin de l'initiation de l'application.
    Pour rappel, aucun besoin de faire ca, ou ce qui est décrit après, sous Windows et Linux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Platform.runLater(() -> cmdrailMainScene.setCursor(theCursor));
    A noter que cela fonctionne avec les pointeurs customs, mais pas les pointeurs par défaut (toujours impossible d'afficher le curseur WAIT ou NONE par exemple), mais que ce la casse presque immédiatement des qu'on sort le pointeur de la fenêtre.

    J'ai ensuite rajouté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cmdrailMainScene.onMouseEntered(event -> cmdrailMainScene.setCursor(theCursor));
    Et cela fonctionne parfois(mais pas toujours) un peu plus longtemps, mais invariablement. au bout d'un certain temps et de quelques aller-retour en dehors de la fenêtre, le pointeur rebascule définitivement sur le pointeur par défaut.
    Pourtant la méthode est bien invoquée comme il se doit.

    Alors je me suis dit "peut-être il y a un soucis de garbage collection qui arrive trop top ?" donc j'ai changé en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Platform.runLater(() -> {
        final var image = new Image(getClass().getResource("cursor.png").toExternalForm());
        Cursor theCursor = new ImageCursor(image, image.getWidth()/2, image.getHeight()/2);
        cdmrailMainScene.setCursor(theCursor);
    });
    cmdrailMainScene.onMouseEntered(event -> {
        final var image = new Image(getClass().getResource("cursor.png").toExternalForm());
        Cursor theCursor = new ImageCursor(image, image.getWidth()/2, image.getHeight()/2);
        cmdrailMainScene.setCursor(theCursor));
    };
    Et la c'est la fete du slip : parfois le pointer custom est restauré lorsque je passe sur le coin supérieur gauche de la fenêtre, parfois non et on garde le pointeur par défaut.

    Ah oui et j'oubliais : quand il fonctionne, souvent le pointeur custom persiste sur tout le bureau de macOS quand on sort de la fenêtre, notamment en passant par la bordure supérieure...
    Parfois il persiste également plusieurs secondes apres avoir fermé le stage...
    Bref, je pense que la gestion du pointeur sous macOS est boinker... pour rester poli...

    Nom : boink.jpg
Affichages : 25
Taille : 173,4 Ko

    Si c'est pour un jeu qu'il va falloir faire disparaître le curseur, oui ca va être gênant.
    Si le curseur wait est destine a indiquer qu'il faut attendre le temps d'une initialisation ou que des traitements de longue durée s'effectuent, il y a moyen de contourner le soucis avec l'affichage d'une ProgressBar ou d'un panneau d'information par dessus l'interface, ou en désactivant la saisie souris + clavier / désactivant le composant, etc.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 91
    Par défaut
    Hello
    Comme toujours une réponse plein d'enseignement
    C'est un programme de simulation et de gestion d'une réseau ferroviaire miniature
    A priori j'aurais besoin d'un pointeur custom avec une image
    Je n'en suis pas encore là dans mon développement mais j'ai testé le curseur pour voir et j'ai vu qu'il y a un problème
    Encore merci pour toutes tes réponses
    Louis

Discussions similaires

  1. Curseur affichage dynamique
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 26/01/2007, 17h58
  2. [WinForms]affichage de texte au passage du curseur
    Par misscricri dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 15/01/2007, 18h46
  3. affichage d'un div à la position du curseur
    Par n00noors dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/09/2006, 18h16
  4. [C#] Touche Tab, Affichage du curseur dans un RichText Box.
    Par schizette dans le forum Windows Forms
    Réponses: 1
    Dernier message: 19/07/2006, 13h16
  5. Probleme d'affichage du curseur dans un chp texte avec firef
    Par dadovb dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/10/2005, 13h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo