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

AWT/Swing Java Discussion :

Question à propos des méthodes getAccessibleContext, getAccessibleChild et getInvoker


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 128
    Points : 70
    Points
    70
    Par défaut Question à propos des méthodes getAccessibleContext, getAccessibleChild et getInvoker
    Bonjour,

    J'aimerais savoir, dans le cas où l'on a un JComboBox "menu", s'il est possible que getInvoker renvoie un pointeur NULL après cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    menu.getAccessibleContext().getAccessibleChild(0).getInvoker();
    (En tenant compte que l'on vérifie que le child en question est bien un instanceof BasicComboPopup)
    Si oui, pourquoi et comment ?

    Moi je dirais que oui et cela viendrait du fait que le Child est créé et non pas récupéré, donc qu'il n'y a pas, fatalement, de component derrière.

    Mais si c'est effectivement le cas, cela impliquerait que la création d'un JComboBox ne crée pas de child ou que celui-ci pourrait être supprimé. Cela me paraît cependant peu vraisemblable.

    Voici ce qu'indique la doc des méthodes
    AccessibleContext javax.swing.JComboBox.getAccessibleContext()
    Gets the AccessibleContext associated with this JComboBox. For combo boxes, the AccessibleContext takes the form of an AccessibleJComboBox. A new AccessibleJComboBox instance is created if necessary.

    javax.accessibility.AccessibleContext.getAccessibleChild(int arg0)
    Returns the specified Accessible child of the object. The Accessible children of an Accessible object are zero-based, so the first child of an Accessible child is at index 0, the second child is at index 1, and so on.

    javax.swing.JPopupMenu.getInvoker()
    Returns the component which is the 'invoker' of this popup menu.
    Quelqu'un saurait-il m'éclairer à ce sujet ?

    Merci d'avance pour votre aide.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 128
    Points : 70
    Points
    70
    Par défaut
    Bon, je vais faire plus simple peut être.

    Voici un lien contenant la classe BoundsPopupMenuListener.java.
    Sur ce lien, également, se trouve un fichier .jnlp afin de tester cette classe.
    Voici le lien :
    http://tips4java.wordpress.com/2010/...mbo-box-popup/

    Cette classe permet, notamment, de déplacer le popup d'un JComboBox au dessus de celui-ci et non en dessous.
    Lorsque vous exécuter le fichier .jnlp, si vous cocher "Popup Above", vous devriez observez le comportement dont je vous parle à la phrase précédente.

    Sur linux, no soucy.
    Par contre, sur mac os x, j'ai plusieurs soucis.
    En premier lieu, le popup ne s'affiche pas au dessus du JComboBox mais en dessous.
    Pour savoir d'où vient le problème, j'ai catché si une erreur se présentait. Et en effet, on a un NULL pointer quand la méthode popupAbove invoque getInvoker().
    L'objet de mon post au dessus était de savoir pourquoi ça peut arriver.
    Et pour terminer, si on fait abstraction du getInvoker() en passant directement à la méthode popupAbove le JComboBox qui s'occupe d'invoquer le popup, ça ne marche toujours pas.

    Je pense(avec très peu de certitudes) que ça doit venir de la version du jre. Sur mac os x, on a pas la jre 1.7, la version la plus récente est 1.6.0_29.
    Entre temps, il y a peut-être eu une mise à jour qui affecte négativement la classe en question

    Si vous avez une idée de comment détourner le problème ou de confirmer/infirmer mon hypothèse, vous êtes les bienvenues

    Un tout grand merci

    Edit : J'ai installé une beta du jdk 1.7 et le soucis est toujours là.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 128
    Points : 70
    Points
    70
    Par défaut
    Ouww, j'ai quand même réussi à poser une question dont personne a encore la réponse :p Même sur le forum d'oracle ^^

  4. #4
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    As tu essayé de remplacer le par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getAccessibleContext().getAccessibleParent();
    comme recommandé dans un des commentaires du blog auquel tu te réfères?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 128
    Points : 70
    Points
    70
    Par défaut
    Bien évidemment

    J'ai crée un sujet sur le forum d'oracle.
    Même sujet sur le forum oracle

    Il s'agit d'un bug, il semblerait.
    Je pense l'avoir identifier.
    Je ne sais pas comment je vais le détourner.
    Je vais ajouter une réponse sur ce forum et sur l'autres expliquant où se trouve le bug. Et plus tard dans la soirée, peut-être, comment le résoudre

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 128
    Points : 70
    Points
    70
    Par défaut
    Bonjour ou bonsoir,

    J'ai trouvé ma réponse.

    Le problème provient de la classe javax.swing.plaf.basic.BasicComboPopup.
    Les versions inculpées(sans trop de certitudes) : JRE 1.6.0_22 jusqu'à 1.7.0_3.
    Le problème est à l'origine une correction de cette classe suite à un bug.

    Le soucis en question provient donc des lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        /**
         * Implementation of ComboPopup.show().
         */
        public void show() {
            comboBox.firePopupMenuWillBecomeVisible();
            setListSelection(comboBox.getSelectedIndex());
            Point location = getPopupLocation();
            show( comboBox, location.x, location.y );
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        // Overriden PopupMenuListener notification methods to inform combo box
        // PopupMenuListeners.
        protected void firePopupMenuWillBecomeVisible() {
            super.firePopupMenuWillBecomeVisible();
            // comboBox.firePopupMenuWillBecomeVisible() is called from BasicComboPopup.show() method
            // to let the user change the popup menu from the PopupMenuListener.popupMenuWillBecomeVisible()
        }
    Pour que le programme fonctionne, il faut revenir à l'ancienne version :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        /**
         * Implementation of ComboPopup.show().
         */
        public void show() {
            setListSelection(comboBox.getSelectedIndex());
            Point location = getPopupLocation();
            show( comboBox, location.x, location.y );
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        // Overriden PopupMenuListener notification methods to inform combo box
        // PopupMenuListeners.
        protected void firePopupMenuWillBecomeVisible() {
            super.firePopupMenuWillBecomeVisible();
            comboBox.firePopupMenuWillBecomeVisible();
        }
    Voici quelques petites analyses que j'ai fais sur linux :
    1] BasicComboPopup possède un mouse listener
    2] Quand un clic sur la souris est détecté, il invoque BasicComboPopup.togglePopup()
    3] La méthode togglePopup() rend le Popup visible si il ne l'est pas et inversement
    4] En l’occurrence, ici il rend visible le Popup. Pour cela, il invoque la méthode BasicComboPopup.show()
    5] La méthode show(), sans rentrer dans les détails(parce qu'ils ne me sont pas tous connus) effectue ceci : modification des variables qui concernent le JComboBox, récupération de la position du Popup associé au BasicComboPopup de la JComboBox, ajout de l'invoker au BasicComboPopup, modification des variables de position du Popup, la méthode firePopupMenuWillBecomeVisible(PopupMenuEvent e) est executé, à la fin de la méthode PopupMenuWillBecomeVisible(PopupMenuEvent e) le Popup est supprimé, on associe un nouveau Popup au BasicComboPopup.

    Sur les versions supérieures de BasicComboPopup, on commence par faire un togglePopup(), suivi du firePopupMenuWillBecomeVisible(PopupMenuEvent e), puis la même chose à partir du point 4 en haut.
    Dans ce cas précis, BasicComboPopup n'a pas d'invoker avant de rentrer dans PopupMenuWillBecomeVisible(PopupMenuEvent e) et on a le soucis expliqué au premier post.
    De plus, après PopupMenuWillBecomeVisible(PopupMenuEvent e), le Popup est supprimé et on revient au point 4. A partir de là, un nouveau Popup est créé(puisqu'il n'y en a plus) et placé sans prise en compte des variables de positionnements de l'ancien Popup. Et donc fatalement, le Popup est toujours après le JComboBox.


    Je n'ai pas encore trouver une solution sans toucher cette classe. Il y en a surement une en touchant les flags associés à PopupMenuWillBecomeVisible(PopupMenuEvent e) et en invoquant certaines méthodes. Néanmoins, vu que de ce côté là, il n'y a que très peu de méthodes publiques, je pense qu'il va falloir passer par des classes parentes. Mais ça je verrais demain.

    Sérieux, si vous avez une idée avec ce que je vous ai donné, je crierais de joies en la lisant ^^

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 128
    Points : 70
    Points
    70
    Par défaut
    Ca y est, j'ai trouvé une solution !

    Je crée ce post, non seulement pour clarifier les choses sur le problème mais également pour apporter une solution.

    Le problème en lui même :

    Ce que l'on essaye de faire : Afficher le popup d'un JComboBox, non pas en dessous du JComboBox mais au dessus.

    Comment le faire : Avant que ne s'affiche le popup, c'est à dire lors de l'évènement "popupWillBecomeVisible", on récupère le BasicComboPopup du JComboBox et on lui donne une nouvelle position(donc au dessus du JComboBox).

    Pourquoi ça peut ou ne pas marcher : A cause du bug 4743225, la classe javax.swing.plaf.basic.BasicComboPopup a été modifiée.
    Cette modification est disponible à partir du JRE 1.6.0_22 jusqu'à présent.
    L'auteur de la modification écrit ceci à propos de la modification :
    to let the user change the popup menu from the PopupMenuListener.popupMenuWillBecomeVisible()
    Cette modification apporte le problème suivant : On ne peut pas directement modifier la position du popup à partir de PopupMenuListener.popupMenuWillBecomeVisible(). Ainsi cette modification est une correction qui n'apporte pas la bonne solution(qui ne prend pas en compte toutes les modifications possible à un popup avant affichage).
    Quand j'aurais le temps, je notifierais ce problème à oracle.
    Donc, toutes versions inférieur à JRE 1.6.0_22 permet de modifier la position du popup via popupMenuWillBecomeVisible(), et celles supérieurs ne le permettent pas.

    Quel est le problème ? :
    Pour expliquer le problème, je vais mettre en évidence ce qui est exécuté lors du clic sur le JComboBox jusqu'à la fin du traitement de l'affichage du popup dans les deux versions(avant JRE 1.6.0_22 et après 1.6.0_22).
    Citation Envoyé par Avant JRE 1.6.0_22
    • Nous nous trouvons dans le cas où le popup n'est pas affiché. Donc, pas de popup(popup == null) et donc forcément le popup n'a pas de parent(invoker == null).
    • Evenement "MoussePressed". Cet évenement est géré par BasicComboPopup.
    • La méthode qui intercepte l'évenement appel la méthode toggle(). Celle-ci affiche le popup si il n'est pas affiché et inversement. Dans le cas où on doit afficher le popup, la méthode show() est appelée, sinon c'est hide(). Les points suivants montrent ce qui se passe dans le cas de l'appel à la méthode show() vu que l'on se trouve dans le cas où le popup n'est pas affiché
    • On désigne l'index du JComboBox et on récupère la position normale du popup par rapport au JComboBox, c'est à dire en dessous du JComboBox, donc (0, hauteurDuJComboBox)
    • On invoque la méthode show(ComboBox, positionNormaleXduPopup, positionNormaleYduPopup) qui va effectuer les opérations suivantes :
      • On définit l'invoker du popup, à savoir le JComboBox
      • On définit le frame du popup, à savoir le frame sur lequel le JComboBox est placé
      • On récupère la position du coin supérieur gauche du JComboBox par rapport à l'écran
      • On additionne cette position à la position normale du popup par rapport au JComboBox, et on obtient donc la position du popup par rapport à l'écran. On définit ainsi la position du popup
      • On appel la méthode setVisible(true). Cette méthode fait ceci :
        • Vérifie que le popup a affiché est un popup indépendant ou pas grâce à son invoker
        • On prépare le popup à s'afficher
        • On appel l'événement popupMenuWillBecomeVisible()
        • On crée le popup à afficher avec les variables qui lui ont été définies et on l'affiche
    Citation Envoyé par Après JRE 1.6.0_22
    • Nous nous trouvons dans le cas où le popup n'est pas affiché. Donc, pas de popup(popup == null) et donc forcément le popup n'a pas de parent(invoker == null).
    • Evenement "MoussePressed". Cet évenement est géré par BasicComboPopup.
    • La méthode qui intercepte l'évenement appel la méthode toggle(). Celle-ci affiche le popup si il n'est pas affiché et inversement. Dans le cas où on doit afficher le popup, la méthode show() est appelée, sinon c'est hide(). Les points suivants montrent ce qui se passe dans le cas de l'appel à la méthode show() vu que l'on se trouve dans le cas où le popup n'est pas affiché
    • On appel l'événement popupMenuWillBecomeVisible()
    • On désigne l'index du JComboBox et on récupère la position normale du popup par rapport au JComboBox, c'est à dire en dessous du JComboBox, donc (0, hauteurDuJComboBox)
    • On invoque la méthode show(ComboBox, positionNormaleXduPopup, positionNormaleYduPopup) qui va effectuer les opérations suivantes :
      • On définit l'invoker du popup, à savoir le JComboBox
      • On définit le frame du popup, à savoir le frame sur lequel le JComboBox est placé
      • On récupère la position du coin supérieur gauche du JComboBox par rapport à l'écran
      • On additionne cette position à la position normale du popup par rapport au JComboBox, et on obtient donc la position du popup par rapport à l'écran. On définit ainsi la position du popup
      • On appel la méthode setVisible(true). Cette méthode fait ceci :
        • Vérifie que le popup a affiché est un popup indépendant ou pas grâce à son invoker
        • On prépare le popup à s'afficher
        • On crée le popup à afficher avec les variables qui lui ont été définies et on l'affiche
    Ce qui est sous-ligné est l'apport de la modification.
    En gros :
    Première version : Il y a un clic sur le JComboBox et le popup n'est pas affiché ? Si oui, on définit le popup avec des variables pré-enregistré. Y a t il quelque chose à modifier dans le popup ? Si oui, on exécute popupMenuWillBecomeVisible(). On crée le popup avec les nouvelles variables(si modifiées) et on l'affiche
    Deuxième version : Il y a un clic sur le JComboBox et le popup n'est pas affiché ? Si oui, on éxécute popupMenuWillBecomeVisible() et on définit le popup avec des variables pré-enregistré(donc ne tenant pas compte de popupMenuWillBecomeVisible()). On crée le popup avec les nouvelles variables et on l'affiche.
    Donc vous voyez bien le soucis, dans la deuxième version, popupMenuWillBecomeVisible() est exécuté avant que le popup ne reçoive la définition de ses variables(invoker, position), donc ses variables sont nulles. Ensuite, il y a définition des variables du popup avec des valeurs pré-enregistrées, donc celles qui ont été définies tant bien que mal ne sont pas tenus en compte.

    Comment résoudre le problème ? :
    Etant donné que dans la deuxième version popupMenuWillBecomeVisible() est exécuté en tout premier lieu par la méthode show(), il suffit de recréer le comportement de la première version. Cependant c'est impossible, les méthodes ne sont pas visibles.
    Dans la même idée mais différement, il suffit de :

    • Supprimer le MouseListener du BasicComboPopup et ajouter notre MouseListener
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
       
      Object child = VotreJComboBox.getAccessibleContext().getAccessibleChild(0);
      if (child instanceof BasicComboPopup) {
      	VotreJComboBox.removeMouseListener(((BasicComboPopup)child).getMouseListener());
      }
      VotreJComboBox.addMouseListener((MouseListener) methodeQuiImplémenteMouseListener);
    • Sur l'événement MousePressed nous effectuons ces lignes :
      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
       
      	public void mousePressed(MouseEvent e) {
      		Component c = e.getComponent();
      		if (c instanceof JComboBox) {
      			Object child = c.getAccessibleContext().getAccessibleChild(0);
      			if (child instanceof BasicComboPopup) {
      				if (!(((JComboBox)c).isPopupVisible())) {
      					((BasicComboPopup)child).show(c, 0, - ((BasicComboPopup)child).getPreferredSize().height);
      				}
      				else {
      					((BasicComboPopup)child).hide();
      				}
      			}
      		}
      	}
      Ceci fonctionne parfaitement
      Pour ceux qui désirent modifier la largeur du popup, voici ce qu'il faut :
      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
       
      	public void mousePressed(MouseEvent e) {
      		Component c = e.getComponent();
      		if (c instanceof JComboBox) {
      			Object child = c.getAccessibleContext().getAccessibleChild(0);
      			if (child instanceof BasicComboPopup) {
      				if (!(((JComboBox)c).isPopupVisible())) {
      					JList list = ((BasicComboPopup)child).getList();
      					JScrollPane scrollPane = (JScrollPane) SwingUtilities.getAncestorOfClass(JScrollPane.class, list);
      					JScrollBar j = scrollPane.getVerticalScrollBar();
      					// La ligne suivante(désactivée) permet de changer la largeur du popup en fonction de l'élément le plus grand de la liste du JComboBox
      					//scrollPane.setPreferredSize(new Dimension(list.getPreferredSize().width, getPopupHeight((JComboBox)c)));
       
      					// Les deux lignes suivantes permettent d'avoir la largeur normale d'un popup
      					Insets insets = ((BasicComboPopup)child).getInsets();
      					scrollPane.setPreferredSize(new Dimension(((JComboBox)c).getSize().width - (insets.left + insets.right), getPopupHeight((JComboBox)c)));
      					((BasicComboPopup)child).show(c, 0, - ((BasicComboPopup)child).getPreferredSize().height);
       
      				}
      				else {
      					((BasicComboPopup)child).hide();
      				}
      			}
      		}
      	}
          public int getPopupHeight(JComboBox j) {
              // Nombre de ligne devant composé le popup
              int minRowCount = Math.min(10, j.getItemCount()); // On limite à max 10 lignes
              JList list = ((BasicComboPopup)j.getAccessibleContext().getAccessibleChild(0)).getList();
              ListCellRenderer renderer = list.getCellRenderer();
              JScrollPane scroller = (JScrollPane) SwingUtilities.getAncestorOfClass(JScrollPane.class, list);
              int height = 0;
       
              Object value = null;
       
              for ( int i = 0; i < minRowCount; ++i ) {
                  value = list.getModel().getElementAt( i );
                  Component c = renderer.getListCellRendererComponent( list, value, i, false, false );
                  height += c.getPreferredSize().height;
              }
       
              if (height == 0) {
                  height = j.getHeight();
              }
       
              Border border = scroller.getViewportBorder();
              if (border != null) {
                  Insets insets = border.getBorderInsets(null);
                  height += insets.top + insets.bottom;
              }
       
              border = scroller.getBorder();
              if (border != null) {
                  Insets insets = border.getBorderInsets(null);
                  height += insets.top + insets.bottom;
              }
       
              return height;
          }


    Voilà voilà. J'y suis arrivé bordel !

    Hop hop hop, je m'avance trop ^^ En fait, il y a un tout petit problème..
    Le petit bouton du JComboBox a son propre MouseListener. Et ce foutu MouseListener donne la main à la méthode toggle()..
    Je n'ai pas encore trouver la façon de supprimer ce listener.
    Si quelqu'un sait, ce serait cool de faire partager

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 128
    Points : 70
    Points
    70
    Par défaut
    Voilà, le petit soucis avec le bouton du JComboBox a été reglé.
    Pour que le bouton fonctionne comme il faut, vous devez faire ceci :
    • Supprimer les deux seuls MouseListener du bouton et rajouter notre MouseListener sur celui-ci :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      	int nbComponent = VotreJComboBox.getComponentCount();
      	int indexFounded = -1;
      	for (int i = 0; i < nbComponent; i++) {
      		if (VotreJComboBox.getComponent(i) instanceof JButton) {
      			indexFounded = i;
      			break;
      		}
      	}
      	if (indexFounded <= 0)
      			//gèrer l'erreur : Corruption du JComboBox ou utilisation d'un ComboBox non autorisé ^^
      	JButton b = (JButton)(VotreJComboBox.getComponent(indexFounded));
      	b.removeMouseListener((b.getMouseListeners())[0]);
      	b.removeMouseListener((b.getMouseListeners())[0]);
      	b.addMouseListener((MouseListener) VotreClasseQuiImplementeMouseListener);
    • Dans votre methode mousePressed vous devez maintenant vérifier en plus que c est une instance de JButton.
      Si c'est le cas, vous prenez son parent, qui est le JComboBox puis c'est la même chose qu'avant.
      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
      if (c instanceof JButton) {
      	Component parent = c.getParent();
      	if (parent instanceof JComboBox) {
      		Object child = ((JComboBox)parent).getAccessibleContext().getAccessibleChild(0);
      		if (child instanceof BasicComboPopup) {
      			if (!(((JComboBox)parent).isPopupVisible())) {
      				JList list = ((BasicComboPopup)child).getList();
      				JScrollPane scrollPane = (JScrollPane) SwingUtilities.getAncestorOfClass(JScrollPane.class, list);
      				JScrollBar j = scrollPane.getVerticalScrollBar();
      			//	scrollPane.setPreferredSize(new Dimension(list.getPreferredSize().width, getPopupHeight((JComboBox)parent)));
      				Insets insets = ((BasicComboPopup)child).getInsets();
      				scrollPane.setPreferredSize(new Dimension(((JComboBox)parent).getSize().width - (insets.left + insets.right), getPopupHeight((JComboBox)parent)));
      				((BasicComboPopup)child).show(parent, 0, - ((BasicComboPopup)child).getPreferredSize().height);
      			}
      			else {
      				((BasicComboPopup)child).hide();
      			}
      		}
      	}
      }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. question à propos des containeurs
    Par bountykiller dans le forum C++
    Réponses: 4
    Dernier message: 02/10/2005, 13h21
  2. Question à propos des états
    Par rangernoir dans le forum IHM
    Réponses: 4
    Dernier message: 30/09/2005, 14h38
  3. Question à propos des compilateurs
    Par elf dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 20/07/2005, 17h00
  4. Question à propos des niveaux de transaction
    Par davy.g dans le forum Oracle
    Réponses: 3
    Dernier message: 18/01/2005, 15h31
  5. Une question à propos des thread
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/11/2003, 14h03

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