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

EDT/SwingWorker Java Discussion :

Problème avec MouseCllicked sous MAC OS.


Sujet :

EDT/SwingWorker Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2022
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2022
    Messages : 51
    Par défaut Problème avec MouseCllicked sous MAC OS.
    Bonjour,

    Cela fait 3 heures que je m'arrache les cheveux (ou presque) car je ne comprends pas pourquoi le code suivant fonctionne très bien sous Windows et pas sous MAC OSX.
    Si je clique bouton-droit je dois entrer dans le mouse listener, et cela ne se produit pas sous MAC.

    Merci pour toute suggestion

    Gégé

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    import javax.swing.JButton;
    import javax.swing.JComboBox;
     
    import java.awt.Color;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
     
    public class TestCombo extends JFrame
    {
    	private static final long serialVersionUID = 1L;
     
    	private JButton 		Terminer 	=	null;
    	private JComboBox		Combo       = null;
    	public TestCombo()
    	{
    		créationBoites();
    		définirListener();
    		this.setLocationRelativeTo(null);
    		setVisible(true);
    		Combo.addItem("Choisissez");
    		 for (int i=0; i < 15 ; i++)
    		 {
    			Combo.addItem("Ligne " + i); 	// on ajoute dans la combo
    		 }	
    	}
     
    	public void créationBoites()
    	 {
    			setSize(500, 286);
    			this.setName("TestCombo");
    			getContentPane().setName("TestCombo");
     
    			JPanel Panel1 = new JPanel();
    				Panel1.setLayout(null);
    				Panel1.setName("Panel1");
    				Panel1.setBounds(65, 11, 421, 218);
    				Panel1.setBackground(Color.gray);
     
    			Combo = new JComboBox();
    				Combo.setName("Combo");
    				Combo.setBounds(149, 97, 212, 22);
     
    			Terminer = new JButton("Terminer");
    				Terminer.setBounds(200, 175, 89, 23);
     
    			Panel1.add(Terminer);
    			Panel1.add(Combo);
    			getContentPane().add(Panel1);
    	}
     
    	private void définirListener()
    	{
    		Terminer.addActionListener(e ->  System.exit(0));
    		Combo.addActionListener(e ->  setColor()); 
     
    		Combo.addMouseListener(new MouseAdapter() 
    		{
    			public void mouseClicked(MouseEvent e)
    			{
    				 if (SwingUtilities.isRightMouseButton(e))
    				 {
    					 System.out.println("clicked right ");
    				 }
    				 else  System.out.println("clicked not right");
    			} 
    			public void mouseReleased(MouseEvent e)
    			{
    				 if (SwingUtilities.isRightMouseButton(e))
    				 {
    					 System.out.println("released right one");
    				 }
    				 else  System.out.println("released not  right ");
    			}  
    		});
    	}
     
    	private void setColor()
    	{
    		System.out.println("Entré dans setCololor");
    	}
     
        public static void main(String[] args) 
    	{
    		 new TestCombo();
    	}
    }

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2022
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2022
    Messages : 51
    Par défaut
    Bonjour,

    Suite à mon post, j'ai recherché la raison. En fait j'ai compris que les JComboBoxes était un composite de plusieurs éléments.
    J'ai donc appliqué le mouse Listener à chaque élement pour être sûr qu'au moins un serait sélectionné. Et cela marche très bien.
    J'ai donc modifié la partie addMouselistener comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
                    Component[] comps = Combo.getComponents();
    		for(Component comp :   comps)
    		{
    		      		comp .addMouseListener(new MouseAdapter() {
    				public void mouseClicked(MouseEvent  e) 
    				{
    					if (SwingUtilities.isRightMouseButton(e))
    					 {
    						 System.out.println("clicked right ");
    					 }
    				}
    			});
    		}
    Donc j'ai résolu mon problème.

    Gégé

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Bonjour,
    Quelle était la version de Java impactée (que je vois si je peux tester ca sur un mac x86) ?

    EDIT - pu tester avec le JDK 23 sur Windows 11 et sur macOS 14.4 et effectivement la combo ignore les click droits. J'ai mis un listener similaire sur le bouton par curiosité et ce dernier reçoit bien les événements click droit sur les 2 systèmes.
    Donc cela peut être un bug mais aussi une difference de philosophie entre les desigsn de ce contrôle dans les 2 systèmes (ex : pendant longtemps les souris mac avaient un seul bouton donc certain contrôles peuvent ne pas avoir prévu le support des autres boutons). Si tu penses que ceci est un bug tu peux tenter de soumettre un rapport de bug.

    EDIT2 - qq recherches sur StackOverflow indiquent que ce soucis est plutôt ancien en fait (des questions datant d'il y a 14 ans !), donc plutôt une diff de design qu'un bug.
    Effectivement ta solution fonctionne bien, mais pour macOS uniquement. Il faudra juste penser a mettre un peu de code pour detecter l'OS et ajouter le listener au bon endroit.
    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 averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2022
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2022
    Messages : 51
    Par défaut
    En fait je développe sous Eclipse avec le build 1.8.0_381-b09. Donc si tu as le même problème avec JDK 23 c'est que ceci n'est pas corrigé. Je ne pense pas que ce soit un bug, mais simplement que cette fonction n'est pas implémentée. D'ailleurs si l'on trace les différents composants de la JComboBox, on remarque que ce n'est pas les mêmes classes que l'on obtient sous WIN ou sous MAC.

    Ce n'est le seul problème avec ces boxes. En surchargeant JComboBox, j'ai, pour chaque composant, essayé de définir des couleurs différentes (Background pour la partie éditable et background et foreground pour la partie liste.). Ceci marche très bien sous Windows 11, mais pas sous MAC. Sous mac avec setEditable(true) la partie entrée est colorée mais pas celle de la liste, et avec setEditable(false) c'est le contraire. Donc pas possible d'avoir deux différentes couleurs pour component.setBackgroung(Color.xxxx).

    Peut-être que ceci est corrigé avec une version plus récente de Java ? mais j'en doute.

    Cordialement

Discussions similaires

  1. Problème de "import" avec eclipse sous Mac
    Par sambi dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 26/03/2009, 10h31
  2. lancement eclipse avec option sous mac os x
    Par cadryer dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 12/08/2008, 16h55
  3. Problème avec SWT sous Mac OS X
    Par vdumont dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 02/02/2008, 17h14
  4. Compatibilité avec ie sous mac
    Par Denti-fritz dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 15/11/2007, 12h05
  5. Configuration SDL avec eclipse sous Mac
    Par kitsune dans le forum SDL
    Réponses: 6
    Dernier message: 27/04/2007, 10h59

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