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 :

[popup] ne pas avoir de 'cache' avec PopupFactory


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [popup] ne pas avoir de 'cache' avec PopupFactory
    Bonjour,

    Pour afficher plusieurs composants, j'utilise un popup qui s'affiche lorsque l'on actionne un JButton et se masque lorsque l'on re-actionne le JButton.

    Ce 'système' peut-être présent n fois dans un JScrollPane.

    Mon problème est que PopUpFactory met en 'cache' le popup.
    Or pour chaque ligne le contenu du popup doit-être indépendant.. Mais le popup ne gére pas cela correctement :

    Le premier popup contenait la même chose que le second mais une fois que j'ai affiché le second et réaffiche le premier, le résultat n'est pas celui attendu..

    Voici le code d'affichage du popup.
    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
     
    ...
    addActionListener(new ActionListener(){
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    if ( popup == null ) {
                        popup = getPopup();
                        popup.show();
                        System.out.println("how popup " + popup );
                    } else {
                        System.out.println("hide popup " + popup);
                        popup.hide();
                        popup= null;
                    }
                }
            }); 
    ....
     
     private Popup getPopup(){
            int x,y;
     
            x = (int)btn.getLocationOnScreen().getX()+5;
            y = (int)btn.getLocationOnScreen().getY()+btn.getHeight();
     
            PopupFactory factory = PopupFactory.getSharedInstance();
            popup = factory.getPopup(btn,pnl,x,y);
     
            return popup;
        }
    Quelqu'un à une idée ?

  2. #2
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,

    je me souviens avoir utilisé un JPopupMenu, et ce sans passer par la PopupFactory (avec un MouseListener). Je n'ai pas eu de problèmes de ce type. Pour tout te dire, je ne savais même pas que cette classe existait (PopupFactory).
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Haaa oui c'est juste il y à la méthode public Component add(Component comp)

    Mais le résultat est toujours le même. Le second affiche bien son contenu alors que le permier ne l'affiche plus complètement.

    Ca ne viens donc surement pas du Popup en lui-même..

    Voici mon 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
     
    addActionListener(new ActionListener(){
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    System.out.println("show/hide popup for content : " + pnl );
                    if ( popup == null ) {
                        //popup = getPopup();
                        //popup.show();
                        pp = new JPopupMenu();
                        pp.add(pnl);
                        pp.show(btn, (int)btn.getLocationOnScreen().getX()+5, (int)btn.getLocationOnScreen().getY()+btn.getHeight() );
                        //System.out.println("show popup " + pp );
                    } else {
                        //System.out.println("hide popup " + pp);
                        pp.setVisible(false);
                        //popup.hide();
                        //popup= null;
                    }
                }
            });
    et le résultat aprés un click sur le premier ensuite sur le second et encore sur le premier.

    show/hide popup for content :
    javax.swing.JScrollPane[,0,0,0x0,invalid,layout=javax.swing.ScrollPaneLayout$UIResource,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.LineBorder@6214f5,flags=16777544,maximumSize=,minimumSize=,preferredSize=,columnHeader=,horizontalScrollBar=javax.swing.JScrollPane$ScrollBar[,0,0,0x0,invalid,layout=com.sun.java.swing.plaf.windows.WindowsScrollBarUI,alignmentX=0.0,alignmentY=0.0,border=,flags=4194632,maximumSize=,minimumSize=,preferredSize=,blockIncrement=10,orientation=HORIZONTAL,unitIncrement=1],horizontalScrollBarPolicy=HORIZONTAL_SCROLLBAR_AS_NEEDED,lowerLeft=,lowerRight=,rowHeader=,upperLeft=,upperRight=,verticalScrollBar=javax.swing.JScrollPane$ScrollBar[,0,0,0x0,invalid,layout=com.sun.java.swing.plaf.windows.WindowsScrollBarUI,alignmentX=0.0,alignmentY=0.0,border=,flags=4194632,maximumSize=,minimumSize=,preferredSize=,blockIncrement=10,orientation=VERTICAL,unitIncrement=1],verticalScrollBarPolicy=VERTICAL_SCROLLBAR_AS_NEEDED,viewport=javax.swing.JViewport[,0,0,0x0,invalid,layout=javax.swing.ViewportLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=25165832,maximumSize=,minimumSize=,preferredSize=,isViewSizeSet=false,lastPaintPosition=,scrollUnderway=false],viewportBorder=]
    show/hide popup for content : javax.swing.JScrollPane[,0,0,0x0,invalid,layout=javax.swing.ScrollPaneLayout$UIResource,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.LineBorder@1f6f27b,flags=16777544,maximumSize=,minimumSize=,preferredSize=,columnHeader=,horizontalScrollBar=javax.swing.JScrollPane$ScrollBar[,0,0,0x0,invalid,layout=com.sun.java.swing.plaf.windows.WindowsScrollBarUI,alignmentX=0.0,alignmentY=0.0,border=,flags=4194632,maximumSize=,minimumSize=,preferredSize=,blockIncrement=10,orientation=HORIZONTAL,unitIncrement=1],horizontalScrollBarPolicy=HORIZONTAL_SCROLLBAR_AS_NEEDED,lowerLeft=,lowerRight=,rowHeader=,upperLeft=,upperRight=,verticalScrollBar=javax.swing.JScrollPane$ScrollBar[,0,0,0x0,invalid,layout=com.sun.java.swing.plaf.windows.WindowsScrollBarUI,alignmentX=0.0,alignmentY=0.0,border=,flags=4194632,maximumSize=,minimumSize=,preferredSize=,blockIncrement=10,orientation=VERTICAL,unitIncrement=1],verticalScrollBarPolicy=VERTICAL_SCROLLBAR_AS_NEEDED,viewport=javax.swing.JViewport[,0,0,0x0,invalid,layout=javax.swing.ViewportLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=25165832,maximumSize=,minimumSize=,preferredSize=,isViewSizeSet=false,lastPaintPosition=,scrollUnderway=false],viewportBorder=]
    show/hide popup for content : javax.swing.JScrollPane[,1,2,156x42,invalid,layout=javax.swing.ScrollPaneLayout$UIResource,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.LineBorder@6214f5,flags=16777544,maximumSize=,minimumSize=,preferredSize=,columnHeader=,horizontalScrollBar=javax.swing.JScrollPane$ScrollBar[,0,0,0x0,hidden,layout=com.sun.java.swing.plaf.windows.WindowsScrollBarUI,alignmentX=0.0,alignmentY=0.0,border=,flags=4194632,maximumSize=,minimumSize=,preferredSize=,blockIncrement=10,orientation=HORIZONTAL,unitIncrement=1],horizontalScrollBarPolicy=HORIZONTAL_SCROLLBAR_AS_NEEDED,lowerLeft=,lowerRight=,rowHeader=,upperLeft=,upperRight=,verticalScrollBar=javax.swing.JScrollPane$ScrollBar[,0,0,0x0,hidden,layout=com.sun.java.swing.plaf.windows.WindowsScrollBarUI,alignmentX=0.0,alignmentY=0.0,border=,flags=4194632,maximumSize=,minimumSize=,preferredSize=,blockIncrement=10,orientation=VERTICAL,unitIncrement=1],verticalScrollBarPolicy=VERTICAL_SCROLLBAR_AS_NEEDED,viewport=javax.swing.JViewport[,1,1,154x40,invalid,layout=javax.swing.ViewportLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=25165832,maximumSize=,minimumSize=,preferredSize=,isViewSizeSet=true,lastPaintPosition=java.awt.Point[x=0,y=0],scrollUnderway=false],viewportBorder=]
    Dernière modification par Invité ; 25/10/2006 à 15h29.

  4. #4
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Je te conseille d'aller jeter un oeil au tutoriel de Sun. Il n'y a pas besoin d'ordonner au JPopupMenu se se cacher.

    En général, je construis le JPopupMenu dans le constructeur du composant qui le contrôle, et je me contente de faire un show au moment voulu. Il me semble que ça suffit.

    Dans ton code, tu testes la valeur de la variable popup, mais tu assignes une valeur à pp. Ca ne me dit rien de bon.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par xavlours
    Je te conseille d'aller jeter un oeil au tutoriel de Sun.
    Oui c'est ce que je vais faire.

    Citation Envoyé par xavlours
    Dans ton code, tu testes la valeur de la variable popup, mais tu assignes une valeur à pp. Ca ne me dit rien de bon.
    Ha oui, en effet ça risque de poser des problèmes.
    Enfin bon c'est juste un code modifié encore et encore..

    Merci por ton conseil, je vais tester cela aussi..

  6. #6
    Invité
    Invité(e)
    Par défaut
    Voilà j'ai maintenant ce code sur le JButton.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    this.btnShow = new JButton(Titles.PARAM_LIGNE_BTNVIEWALL);
            this.btnShow.setToolTipText(Titles.PARAM_LIGNE_BTNVIEWALL_TOOLTIP);
            try {
                this.btnShow.setIcon( new ImageIcon(getClass().getClassLoader().getResource("images/popup.png")) );
            } catch ( NullPointerException e ) {}
            this.btnShow.addActionListener(new ActionListener(){
               public void actionPerformed(ActionEvent e) {
                   JPopupMenu pp = new JPopupMenu();
                   pp.add(popupContent);
                   pp.show((JButton)e.getSource(), btnShow.getX(), btnShow.getY());
               } 
            });
    Mais le résultat est toujours le même...

Discussions similaires

  1. [AC-2007] Ne pas avoir de doublons dans une requête avec beaucoup de OU
    Par GroFlo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/02/2012, 15h52
  2. Vider le cache pour ne pas avoir de champs remplis dans un formulaire.
    Par xess91 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 03/06/2010, 11h43
  3. Réponses: 0
    Dernier message: 02/06/2008, 13h30
  4. Ne pas utiliser le cache avec open
    Par coockie_jr dans le forum C++
    Réponses: 6
    Dernier message: 30/05/2008, 17h51
  5. [eclipse][plugin] Comment avoir une fenêtre avec focus
    Par relivio dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 07/04/2004, 15h54

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