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

Composants Java Discussion :

[JList] Redéfinir le renderer pour incorporer un JTextArea


Sujet :

Composants Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 58
    Points : 50
    Points
    50
    Par défaut [JList] Redéfinir le renderer pour incorporer un JTextArea
    Bonjour !

    Voilà, premier post ^^ J'ai farfouillé un peu dans les anciens posts de ce forum, et sur google aussi. Je n'ai pas vraiment trouvé de solution claire. Ok, ca c'est dit, maintenant j'expose mon problème ! ^^

    Actuellement, j'ai une JFrame avec une JList et un bouton. La JList contient des objets particuliers, et j'ai donc redéfinit le renderer de la Jlist pour afficher les informations que je souhaite. Le renderer est donc un JPanel qui contient deux JLabel en haut, et un JTextArea au centre. Le JTextArea me sert à afficher un commentaire pour l'objet, ce commentaire peut-être de longueur quelconque (voir premier screenshot).

    Le problème est que je souhaite pouvoir faire afficher plusieurs lignes en "wrappant" le contenu. Mais cela ne semble pas marcher. J'ai tenté avec des setPreferredSize(), et même avec du code récupérer dans des posts de ce forum, mais rien y fait (voir second screenshot).

    Les screenshots :



    Voilà, si qqun pourrait m'indiquer la voie à suivre !

  2. #2
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Le problème est arrivé il n'y a pas longtemps sur le forum, et il est apparu que tu ne peut pas avoir des composants de taille différente dans une JList même en appellant ensuite setPreferedSize

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 58
    Points : 50
    Points
    50
    Par défaut
    erf.

    Quelle solution dois-je envisager ? JTable ? Un truc à la main barbare ?

  4. #4
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par toto019
    erf.

    Quelle solution dois-je envisager ? JTable ? Un truc à la main barbare ?
    Ben, d'après ce que m'a dit une personne ayant essayé avec un JTable, ca marche pas non plus

    Mais il doit quand même bien y a avoir une solution....

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 58
    Points : 50
    Points
    50
    Par défaut
    Bah pour le moment, j'ai fixé une taille fixe pour les cellules de la JList. Mais c'est pas propre ... Je ne vois vraiment pas comment faire !!!

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par wichtounet
    Ben, d'après ce que m'a dit une personne ayant essayé avec un JTable, ca marche pas non plus

    Mais il doit quand même bien y a avoir une solution....
    Tiens voilà le contraire de ce que l'on t'a affirmé(et en plus c'est bien violent...):

    http://www.jroller.com/page/santhosh...le_better_than
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  7. #7
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par sinok
    Tiens voilà le contraire de ce que l'on t'a affirmé(et en plus c'est bien violent...):

    http://www.jroller.com/page/santhosh...le_better_than
    Joli

    J'ai pas tout lu, mais par contre, est-ce que ça va changer quelque chose au problème ? Car c'est bien beau, c'est redimensionnable à la main, mais est-ce que ca va permettre le redimensionnement en fonction de la taille du component du renderer ?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 58
    Points : 50
    Points
    50
    Par défaut
    bon, beh, j'en suis arrivé à à peut près à ce que je voulais.
    Seul truc, j'ai du fixer des tailles, et la fenêtre ne devient plus resizable (sinon le scroller horizontal apparaît). En fait, l'affichage se fait au moment de la création du panel, le rafraîssement ne permet pas de modifier la hauteur des cellules de la liste (ce qui est bien dommage), à moins que qqun est une solution.



    Maintenant, j'en arrive au problème ou le bouton dans le renderer n'est pas cliquable, et ca je n'avais pas prévu

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Tu rajoutes un MouseListener sur la liste, tu recuperes le numero de ligne appropriee, ainsi que le renderer pour cette ligne. Ensuite, tu verifies que tu te trouves bien audessus du bouton et tu appelles manuellement la fonction sensee etre appellee par le bouton (ou tu fait button.doClick()).

    Un ennui avec cette methode c'est que visuellement tu ne verras probablement pas le boutton se selectionner, s'enfoncer et revenir a sa position nornale a l'ecran. Donc si tu veux que ca s'affiche de maniere normale pour l'utilisateur il va falloir predre un peu de temps et faire un petit travail suplementaire d'animation de l'etat enfonce/selectionne du bouton.

    EDIT : j'ai modifie la methode apres avoir verifie qu'il n'y a pas de CellEditor pour les JList.
    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

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 58
    Points : 50
    Points
    50
    Par défaut
    C'est possible de rajouter un mouseListener direct sur la cellule de la JList ?

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    La cellule de la JList étant un JComponent (cf renderer) bah oui, il suffit que tu ajoutes le listener au composant dans le renderer
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  12. #12
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Oui mais le renderer etant utilise comme un tampon encreur, cela ne fera rien de special : la liste ne transmettant pas l'evenement souris au renderer et ce dernier n'etant pas dans la hierarchie des composants graphiques.

    Voici un bout de code faisant ce que j'expliquais (sans l'animation du bouton).

    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
     
    package test;
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.*;
    import javax.swing.event.*;
     
    public class TestCellRenderer {
      /** Program entry point.
       * @param args Arguments from the command line.
       */
      public static void main(String ...args) {
        SwingUtilities.invokeLater(new Runnable() {
          /** {@inheritDoc}
           */
          public void run() {
            JList list = new JList(new Object[] {0, 1, 2, 3, 4, 5, 6, 7, 8});
            list.setCellRenderer(new TestListCellRenderer());
            list.addMouseListener(new TestMouseAdapter());
            JFrame frame = new JFrame("Test");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new JScrollPane(list));
            frame.pack();
            frame.setVisible(true);
          }
        });
      }
     
      private static class TestMouseAdapter extends MouseAdapter {
        /** {@inheritDoc}
         */
        @Override public void mouseClicked(MouseEvent event) {
          System.out.println("\n\nMouse clicked in list.");
          JList list = (JList) event.getSource();
          int index = list.locationToIndex(event.getPoint());
          TestListCellRenderer renderer = (TestListCellRenderer) list.getCellRenderer().getListCellRendererComponent(list, list.getModel().getElementAt(index), index, true, true);
          Rectangle bounds = list.getCellBounds(index, index);
          System.out.println("\tEVENT_LIST\t\t" + event.getPoint());
          System.out.println("\tRENDERER_LIST\t\t" + bounds);
          System.out.println("\tRENDERER\t\t" + renderer.getBounds());
          Rectangle oldBounds = renderer.getBounds();
          renderer.setBounds(bounds);
          renderer.validate();
          event = SwingUtilities.convertMouseEvent(list, event, renderer);
          renderer.mouseClicked(event);
          renderer.setBounds(oldBounds);
          renderer.validate();
        }
      }
     
     
      private static class TestListCellRenderer extends JPanel implements ListCellRenderer, MouseListener, ActionListener {
        private static final Border NON_SELECTION_BORDER = new EmptyBorder(2, 2, 2, 2);
        private static final Border SELECTION_BORDER = new CompoundBorder(new EmptyBorder(1, 1, 1, 1), new LineBorder(Color.BLUE, 1));
     
        private JLabel label = new JLabel();
        private JButton button = new JButton();
     
        /** Creates a new instance.
         */
        public TestListCellRenderer() {
          super();
          setOpaque(false);
          setLayout(new FlowLayout(FlowLayout.LEADING));
          add(label);
          add(button);
          addMouseListener(this);
          button.addActionListener(this);
        }
     
        /** {@inheritDoc}
         */
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
          setBorder((isSelected ? SELECTION_BORDER : NON_SELECTION_BORDER));
          boolean enabled = list.isEnabled();
          label.setEnabled(enabled);
          button.setEnabled(enabled);
          String text = value.toString();
          label.setText(text);
          button.setText(text);
          button.setActionCommand(text);
          return this;
        }
     
        /** {@inheritDoc}
         */
        public void actionPerformed(ActionEvent event) {
          JButton source = (JButton) event.getSource();
          System.out.println("Clicked on button " + source.getActionCommand());
        }
     
        /** {@inheritDoc}
         */
        public void mouseClicked(MouseEvent event) {
          System.out.println("Mouse clicked in renderer.");
          System.out.println("\tEVENT_RENDERER\t\t" + event.getPoint());
          System.out.println("\tRENDERER\t\t" + getBounds());
          System.out.println("\tLABEL\t\t\t" + label.getBounds());
          System.out.println("\tBUTTON\t\t\t" + button.getBounds());
          if (button.contains(event.getPoint())) {
            System.out.println("Clicked in button "+button.getActionCommand());
          }
        }
     
        /** {@inheritDoc}
         */
        public void mousePressed(MouseEvent event) {
        }
     
        /** {@inheritDoc}
         */
        public void mouseReleased(MouseEvent event) {
        }
     
        /** {@inheritDoc}
         */
        public void mouseEntered(MouseEvent event) {
        }
     
        /** {@inheritDoc}
         */
        public void mouseExited(MouseEvent event) {
        }
      }
    }
    Evidement complication oblige, cela ne fonctionne pas correctement. En effet il semblerai que le label n'ai pas la bonne taille et donc le click sur le bouton n'est detecte que lorsqu'on clique sur son extremite gauche (voir carrement en dehors). Donc le decallage horizontal n'est pas correct et le decal vertical non-plus (mais moins). Mais bon c'est juste un test vite-fait mal fait, plus de recherches sont necessaire (ne pas hesiter a aller zieuter les sources du JDK).

    Au fait ton bouton fait'il partit de ton renderer ou de l'objet rendu ??? dans le 2nd cas sa serait probablement plus simple de l'anime (puisque ce ne serait pas le meme bouton pour toute la liste).
    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

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 58
    Points : 50
    Points
    50
    Par défaut
    Merci pour le bout de code ^^ sympa. Je vais tester ça dès ... mardi

    Sinon, le bouton fait parti du renderer. Je dois donc effectuer une action différente en fonction de la cellule selectionné (mais ca, c'est pas dur ...), vu que je récupère le bon objet dans la liste, et l'action et toujours la même quelque soit l'objet selectionné (en gros execution dans un thread).

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 58
    Points : 50
    Points
    50
    Par défaut
    Bon, ca semble bon. J'ai réécrit du code, j'ai refait une liste personnelle à base de JPanel, et de MouseListener pour les selections. L'affichage et l'action sont identiques aux screenshots plus haut.

    La cellule est en fait un JPanel sur laquelle j'ai mis un MouseListener. Quand je clique, je change les couleurs, et je déselectionne l'ancienne cellule sélectionnée.

    Mais j'ai tout de même un soucis, quand je clique dans mon JTextArea, la sélection de la cellule ne se fait pas. J'ai supprimer les MouseListener du JTextArea, mais ca ne fait rien, j'ai aussi mis à setFocusable( false ), et ca ne fait rien non plus. Quelqu'un aurait-il une idée pour faire qu'un JTextArea soit "transparent" au niveau du clic de souris ?

    J'ai tenté une solution à base de JLayeredPane, mais rien ne s'affiche (encore moins bien qu'avant quoi) !

  15. #15
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Je crains que le probleme ne soit exactement le même que pour forwarder le clic de la souris. Il te faut également forwarder le focus. N'oublie pas le renderer est utilisé en tant que tampon juste pour dessiner la cellule, il n'est pas vraiment dans la hierarchie des composants graphiques.

    Si jamais tu compte rendre ta cellule editable, le mieux est peut-etre de te creer une classe EditableJList en te basant sur le code source de JComboBox, JTree et JTable avec effectivement la gestion d'un CellEditor.
    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

  16. #16
    Membre éclairé
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Points : 704
    Points
    704
    Par défaut
    perso, si je devait faire ce qui est sur cet image
    http://img167.imageshack.us/my.php?i...ntions38xi.png

    j'aurais creer un scrollPane a ma facon avec un viewport particulier dont je redefini le layout pour accepter plusieurs panels en les packant les un en dessous des autre.

    Ca aurait ete plus simple je crois.

  17. #17
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    D'oh !!D'oh !!D'oh !!D'oh !!D'oh !!D'oh !!D'oh !!
    Vi effectivement... c'est beaucoup plus facile et pratique comme ca puisqu'il n'y a pratiquement rien a faire...

    En plus tu peux alors mettre en place ton action pour rendre le composant "collapsable" sans trop de probleme. Il faut juste mettre tous tes composants dans un JPanel avec un layout vertical (comme un BoxLayout) puis mettre ce panel parent dans le scroll pane. Tu peux alors avoir des sous-composants de hauteur differente (mais de meme largeur).
    Note : penser a revalidate() et eventuellement getParent().revalidate() lors du collapsing.

    Tellement concentre sur la JList que la solution evidente n'apparait pas
    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

  18. #18
    Membre éclairé
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Points : 704
    Points
    704
    Par défaut


    BoxLayout ou GridBagLayout. (j'aime pas bcp le principe des glue et des rigid area ;-) )

    bien drole ton message :-))

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 58
    Points : 50
    Points
    50
    Par défaut
    Et bien je crois que c'est la solution que j'ai adoptée. Si j'ai bien suivi tous vos propos...

    En fait, j'ai définit une classe comme étant la représentation d'un objet particulier (en l'occurence, des plugins). Un PluginCell correspond à un Plugin. De plus, un PluginCell est un JPanel, sur lequel j'ai posé un écouteur de souris (pour faire l'effet de sélection).

    Ensuite, l'ensemble des PluginCell sont agencés dans des JPanel en cascade (oui, un peu lourd, mais je ne sais pas faire autrement pour que ce soit simple et comme je le souhaite). En l'occurence, j'ai un JPanel général (dont le layout est BorderLayout), dont le haut contient un PluginCell, et le centre contient un autre Panel identique au JPanel général, mais construit sans le Plugin déjà inséré.

    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
    JPanel mainPanel = new JPanel( new BorderLayout() );
    JPanel mainPanelPtr = mainPanel ;
    Plugin[] plugins = manager.getPlugins();
     
    for( int i=0; plugins!=null && i<plugins.length; i++ ) {
     
    	PluginCell c = new PluginCell( plugins[i] );
    	JPanel p = new JPanel( new BorderLayout() );
    	p.setOpaque( false );
     
    	mainPanelPtr.add( c, BorderLayout.NORTH );
    	mainPanelPtr.add( p, BorderLayout.CENTER );
     
    	mainPanelPtr = p;
    }
     
    mainPanel.setOpaque( false );
    add( mainPanel, BorderLayout.CENTER );
    Simple, et efficace, la hauteur se retrouve fixée en fonction du contenu, grâce à la méthode setVisible de mes composants graphiques dans un PluginCell, je peux faire des effets sympas (notamment afficher ou non le JPanel des boutons). Toujours est-il, que j'ai toujours mon JTextArea dans le PluginCell. Mais quand je clique sur ce JTextArea, le mouseListener de mon panel PluginCell n'est pas appellé, pour le moment, j'ai juste rendu invisible le JTextArea quand le PluginCell n'est pas sélectionné. Mais si il y en a beaucoup, le JTextArea contenant une description du Plugin est quand même bien pratique.

    Anyway, si vous avez du code plus léger pour effectuer mon schmilblic ^^

    EDIT : j'ai trouvé, je ne connaissais pas le BoxLayout

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Plugin[] plugins = manager.getPlugins();
    JPanel mainPanel = new JPanel();
    mainPanel.setLayout( new BoxLayout( mainPanel, BoxLayout.PAGE_AXIS ) );
     
    for( int i=0; plugins!=null && i<plugins.length; i++ ) {
    	PluginCell c = new PluginCell( plugins[i] );
    	mainPanel.add( c );
    }
     
    mainPanel.setOpaque( false );
    add( mainPanel, BorderLayout.NORTH );

  20. #20
    Membre éclairé
    Avatar de bbclone
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 537
    Points : 704
    Points
    704
    Par défaut
    la solution est parfoi tellement simple qu'on y pense pas :-)

Discussions similaires

  1. Fonction (ou macro) pour incorporer des images dans Excel
    Par metis dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/05/2007, 13h34
  2. Réponses: 4
    Dernier message: 09/05/2007, 17h03
  3. Probleme pour positionner une JTextArea
    Par L4BiN dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 28/08/2006, 13h30
  4. Réponses: 4
    Dernier message: 07/07/2005, 09h03
  5. Quel type de projet choisir pour incorporer directX9...
    Par Coderm@n dans le forum DirectX
    Réponses: 6
    Dernier message: 02/08/2004, 13h24

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