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

Interfaces Graphiques en Java Discussion :

Affichage JComboBox sous MAC OS


Sujet :

Interfaces Graphiques en 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
    49
    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 : 49
    Par défaut Affichage JComboBox sous MAC OS
    Bonjour,

    Lorsque je définis setEditable(false) et setEditable(true) pour une JComboBox, l'aspect de cette boite est différente sous MAC/OS alors que sous Windows il n'y a pas de changement.

    Le plus ennuyeux, c'est que l'affichage avec "true" est très laid comme vous pouvez le constater sur l'image ci-dessous. Par exemple la flèche est plus haute et n'est plus incrustée dans la zone d'entrée. Est-ce un bug ?

    D'après vous, est-ce que en redéfinissant les tailles de chaque élément je pourrais obtenir quelque chose de plus correct car les utilisateurs n'aiment pas du tout ce aspect, et je ne souhaite pas redessiner complètement cette boite.

    Si oui, comment faire ? Sur l'image jointe, la boite supérieure a été définie avec setEditable(false) et celle en dessous avec setEditable(true);

    Merci.
    Gérard

    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
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JButton;
    import java.awt.Color;
    import javax.swing.JComboBox;
     
    public class TestCombo extends JFrame
    {
    	private static final long serialVersionUID = 1L;
     
    	private JButton 		Terminer 	= null;
     
    	private JComboBox             Combo        = null,
    	                                        Combo2       = null;
    	private JPanel 			MonPanneau = null;
     
    	public TestCombo()
    	{
    		 créationBoites();
    		 définirListener();
    		 this.setLocationRelativeTo(null);
     
    		 Combo.addItem("Choisissez");
    		 Combo2.addItem("Choisissez");
     
    		 for (int i=0;i<15;i++)
    		 {
    			Combo.addItem("Ligne " + i ); 	// on ajoute dans la combo
    			Combo2.addItem("Ligne " + i ); 	// on ajoute dans la combo2
    		 }
    		//  int x  =   Combo.getSelectedIndex();
     
    		 setVisible(true);
    	}
     
    	public void créationBoites()
    	 {
    			setSize(625, 430);
    			this.setName("TestCombo");
    			getContentPane().setName("TestCombo");
     
    			MonPanneau = new JPanel();
    				MonPanneau.setLayout(null);
    				MonPanneau.setName("Panel1");
    				MonPanneau.setBounds(65, 11, 421, 218);
    				MonPanneau.setBackground(Color.gray);
     
    			 Combo = new JComboBox();
    				Combo.setName("Combo");
    				Combo.setBounds(149, 97, 212, 22);
    				Combo.setEditable(false);
     
    			 Combo2 = new JComboBox();
    				 Combo2.setBounds(147, 224, 229, 22);
    				 Combo.setEditable(true);
     
    			Terminer = new JButton("Terminer");
    				Terminer.setBounds(224, 325, 89, 23);
     
    			MonPanneau.add(Terminer);
    			MonPanneau.add(Combo);
    			MonPanneau.add(Combo2);
    			getContentPane().add(MonPanneau);
    	}
     
    	private void définirListener()
    	{
    		Terminer.addActionListener(e ->  System.exit(0));
    	}
     
        public static void main(String[] args) 
    	{
    		 new TestCombo();
    	}
    }
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 899
    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 899
    Billets dans le blog
    54
    Par défaut
    Je crains que ce soucis soit lie a la version de Java / Swing utilisee.

    Avec le JDK 23 sous macOS 15.3.2, cependant je trouve qu'ici c'est la combo du haut qui me semble etre un peu foireuse...
    Nom : Screenshot 2025-04-14 at 09.16.59.png
Affichages : 44
Taille : 68,1 Ko

    EDIT - du coup je comprends pas pourquoi Swing utilise le LnF cross-platform par défaut sous Windows et Linux par contre quand ca tourne sur macOS, ben le LnF par defaut c'est le LnF system, donc le LnF mac. Et ce soucis arrive que dans le LnF mac tandis le LnF Windows et le LnF cross-platform sont tous les 2 OK.
    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
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2022
    Messages
    49
    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 : 49
    Par défaut
    Merci pour ta réponse et tes essais qui confirment bien que les développeurs avaient déjà eu vent du problème. Je marche toujours en Java 8, donc je n'ai pas pu m'apercevoir qu'une correction avait été appliquée sur ce point.

    Je ne suis pas expert en L&F, mais peut-on facilement le modifier (ou en appliquer un autre) pour un composant particulier (par exemple ici JComboBox) ?

    Merci encore.

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 899
    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 899
    Billets dans le blog
    54
    Par défaut
    Aucune idee s'il est possible de modifier le LnF mac par defaut. Helas la plupart de la doc sur le sujet du développement de LnF date deja de 15+ans et pas mal de liens qu'on trouvait auparavant chez Sun ou IBM ne sont plus valides de nos jours.

    Il existe cependant des projects récents comme Darklaf dont il est possible de s'inspirer.

    Il existe aussi de vieux LnF tiers pour macOS (ou plutot OS X) mais pas sur qu'ils collent encore aux paradigmes UI utilises de nos jours (en plus d'apparement tourner sur un mac PowerPC) : Quaqua Look and Feel (GitHub)
    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

  5. #5
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 095
    Par défaut
    Citation Envoyé par bouye Voir le message
    Il existe cependant des projects récents comme Darklaf dont il est possible de s'inspirer.
    Ou éventuellement FlatLaf
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Affichage mail sous mac envoyé par la fonction mail()
    Par leptisam dans le forum Langage
    Réponses: 2
    Dernier message: 08/10/2013, 20h54
  2. Affichage parasite sous Firefox
    Par Steph4fun dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 04/02/2005, 15h05
  3. Affichage graphique sous forme de tableau.
    Par eulone dans le forum C++
    Réponses: 2
    Dernier message: 24/11/2004, 20h34
  4. Affichage étrange sous directGraphic
    Par Cyrik dans le forum DirectX
    Réponses: 7
    Dernier message: 13/09/2003, 13h29

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