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 avec cellules de tailles variables


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 30
    Par défaut JList avec cellules de tailles variables
    Bonjour à tous,

    Je me mets au Swing pour essayer de faire un Tchat.

    Les messages sur le Tchat seront chacun dans une cellule d'une JList (pour récuperer le pseudo du message envoyé avec un evenement mouseClicked sur chaque message indépendemment).

    En implementant un cellRenderer à ma JList qui extends un JTextArea, j'arrive à passer a la ligne et donc à récupérer l'intégralité des messages longs.

    Seulement, je suis obligé de spécifier une hauteur de cellule à ma JList.

    Jusque là, ce n'est pas très grave, sauf que quand l'utilisateur envoie un message qui fait une seule ligne, ca laisse un grand blanc en dessous.

    Voilà la partie de mon code qui concerne la JList

    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
     
     
    JPanel salonCentre = new JPanel();
    JList chpText = new JList();
     
    (...)
     
    salonCentre.setLayout(new BorderLayout());
    sclChpText.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    chpText.setCellRenderer(new MUCRenderer());
    chpText.setListData(new Object[]{"Ligne 1", "Ligne 2 aaaaa aaaaaaa aaaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaa aaaaaaa aaaaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaa aaaaaaaa aaaaaaa aaaaaaaaa aaaaaaaaa"});
    salonCentre.add(BorderLayout.CENTER, sclChpText);
     
    (...)
     
    public class MUCRenderer extends JTextArea implements ListCellRenderer
    	{
    		private static final long serialVersionUID = 1L;
    		public MUCRenderer()
    		{
    			super();
    			setLineWrap(true);
    			setWrapStyleWord(true);	
    		}	
    		public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
    		{
    			setSize(list.getWidth(),(list.getFontMetrics(list.getFont()).getHeight()));
    			setText(value.toString());					
    			return this;						
    		}  
    	}
    Si vous voyez une autre solution que la JList qui pourrait répondre à mes attentes (j'avais essayer de regarder les JTable par exemple...), n'hésitez pas à me faire part de vos idées.

    Merci d'avance.

    TyR.

  2. #2
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    Citation Envoyé par tyrsensei
    Seulement, je suis obligé de spécifier une hauteur de cellule à ma JList.

    Jusque là, ce n'est pas très grave, sauf que quand l'utilisateur envoie un message qui fait une seule ligne, ca laisse un grand blanc en dessous.
    Je ne comprends pas ton problème. Peux-tu s'il te plaît nous montrer un aperçu (une image) de ce que cela rend et de où est le problème stp ?

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 30
    Par défaut
    Bonjour,

    Merci pour ton interet.

    Le code pour remplir la JList est la même qu'au dessus.

    Voici les images.
    En haut, j'ai :



    Et si je descends le JCsrollPane, j'ai ma dernière ligne :



    N'hésitez pas à demander des informations supplémentaires.

    Merci d'avance

  4. #4
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    Ok je comprends...

    Je ne teste pas, et je ne suis pas du tout sûr de moi, mais que donne le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
    		{
    			setText(value.toString());
    			setSize(list.getWidth(),(list.getFontMetrics(list.getFont()).getHeight()) * getLineCount());				
    			return this;						
    		}
    En espérant t'aider...
    Ou alors, peut être en forçant le nombre de rows (ligne affichées) au nombre de lignes, en écrivant un truc de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setRows(getLineCount());

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 30
    Par défaut
    Merci,

    Je teste et je te tiens au courant.

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 30
    Par défaut
    Re,

    Donc, la première solution me donne le même résultat.

    La seconde solution me fait les cellules de ma JList d'une seule ligne, donc la grande ligne est tronquée.

    Merci d'avance.

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 30
    Par défaut
    Citation Envoyé par tyrsensei
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public MUCRenderer()
    		{
    			super();
    			setLineWrap(true);
    			setWrapStyleWord(true);	
    		}
    Euh, il y est deja C'est pour ca que je trouve ca bizarre en fait :/

  8. #8
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    Arf désolé de t'avoir fait perdre du temps...

    Ce que tu souhaites devrait être faisable... Il te faut peut être redéfinir la méthode getPreferredSize() plutot que de faire un setSize(list.getWidth(),(list.getFontMetrics(list.getFont()).getHeight()) * getLineCount());...

    Désolé de ne pas t'aider plus que ça, mais je fais du mieux possible avec mes connaissances...

  9. #9
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 30
    Par défaut
    Ok, merci de ton aide ^^

    Mes connaissances s'arretent avant les tiennes, donc c toujours mieux que rien

    Sinon, j'ai une crainte, c que le setPreferredSize ne change la taille de toutes mes cellules :/

    Peux tu m'expliquer comment cela fonctionne ?

  10. #10
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    Je parlais pas du setPreferredSize mais du getPreferredSize

    non, le getPreferredSize ne s'applique qu'à un objet, pas à l'ensemble des objets d'une classe (si j'ai bien compris ta question...).

    En gros, pour afficher un composant à l'écran, Swing va essayer de l'afficher à sa preferred size (en invoquant getPreferredSize sur le composant). S'il le peut avec les contraintes qu'il a pour la zone autorisée pour ce composant (contraintes réalisées par les layout), il l'affichera à cette size, s'il ne le peut pas, il se débrouille avec les min size et max size des composants (getMinimumSize et getMaximumSize)...

    Le truc, c'est que ça, c'est pour un composant ajouté à un container... Dans le cas des cellules dans une JList, je ne sais pas si le getPreferredSize est invoqué par la JList pour afficher le composant JList (je ne sais pas si tu me suis...).

    En gros, ta JList, tu l'as mise dans un JPanel. Au moment de l'affichage du JPanel, Swing va demander au JPanel sa taille a laquelle il voudrait bien être (appel de la méthode getPreferredSize sur le JPanel).

    En fonction du layout du JPanel, le JPanel va a son tour demander à tous les composants qu'il contient leur preferredSize pour pouvoir calculer la sienne (en fonction du layout associé au JPanel). Il va donc invoquer la méthode getPreferedSize sur la JList.

    La question que je me pose maintenant, est est-ce que la JList va a son tour invoquer la méthode getPreferredSize sur chacunes de ces cellules, ou seulement sur la première et en faire une généralité, ou autre chose...


    Donc à tester...

  11. #11
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 30
    Par défaut
    Ok merci,

    Je comprends deja mieux. Par contre, ma question était exactement la dernière que tu te posais. C'est a dire savoir si on *peut* avoir des celulles de tailles differentes dans une meme JList en fait, et si oui comment (reformulation de la problématique de depart :p)

    En tout cas, merci pour ton aide, et si qqn d'autre nous regarde et a une solution, merci de nous eclairer

    TyR

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 25/09/2019, 23h16
  2. [XL-2003] Fonction INDEX avec matrice de taille variable
    Par cyr.odi dans le forum Excel
    Réponses: 5
    Dernier message: 19/10/2012, 16h14
  3. Tb array avec cellules variables
    Par teddy72000 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/04/2011, 21h07
  4. menu onglet css avec taille variable
    Par altair8080 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 16/06/2010, 10h48
  5. Créer une chaine de taille variable avec des blancs
    Par jojodu31 dans le forum Général Java
    Réponses: 5
    Dernier message: 15/04/2008, 17h38

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