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 : Afficher seulement une partie du contenu


Sujet :

Composants Java

  1. #1
    Membre régulier Avatar de Fahelis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 77
    Points : 87
    Points
    87
    Par défaut JList : Afficher seulement une partie du contenu
    Bonjour,
    Désolé pour le titre du sujet pas très clair, mais je ne savais pas trop comment expliquer en quelques mots.

    J'ai une JList dans laquelle je met des informations récupérés d'une base de données.
    Ma base contient 3 champs : "Numero", "Nom" et "Date"

    Le numéro est un identifiant auto incrémenté que je n'ai pas envie d'afficher car il n'a aucun intérêt pour l'utilisateur.

    J'aimerais donc que ma JList n'affiche que : "nom date", ça pas de souci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for (int i = 0; resultat.next(); i++)
       tab[i] = resultat.getString("Nom") + " : " + resultat.getTimestamp("Date").toString();
     
    JList list = new JList(tab); //data has type Object[]
    Mais du coup, lorsque je sélectionne après dans ma liste avec getSelectedValue() je n'ai plus le numéro associé.

    Se pourrait-il qu'il existe une solution pour laisser le numéro dans la JList mais en le cachant à l'affichage ?
    Pensez au bouton quand votre problème est réglé afin de ne pas faire perdre leur temps aux gens qui essayent gentiment d'aider les autres

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    1. Il faudrait commencer par penser "Object", et te créer un objet représentant tes données, par exemple :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      public class MyData {
      	private long numero;
      	private String nom;
      	private Timestamp date;
       
      	// + getter/setter
      }
    2. Plutôt que de créer un tableau avec des chaines de caractères, il faudrait créer un tableau d'objet "MyData" (ou plus directement un Vector pour ne pas avoir à gérer la taille du tableau) :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      Vector<MyData> values = new Vector<MyData>();
      while (resultat.next()) {
          MyData v= new MyData();
          v.setNumero(resultat.getLong("Numero"));
          v.setNom(resultat.getString("Nom"));
          v.setDate(resultat.getTimestamp("Date"));
          values.add(v);
      }
      JList<MyData> list = new JList<MyData>(values);
      Du coup désormais getSelectedValue() te retourne un objet "MyData" contenant toutes les infos...


    Toutefois par défaut cela t'affichera les objets en utilisant toString(), ce qui donne par défaut quelque chose comme "MyData@1b373a71".
    Tu peux donc redéfinir cette méthode dans MyData pour n'afficher que ce dont tu as besoin.


    Mais le plus propre serait de définir un ListCellRenderer, qui permet de définir le comportement exact de la cellule.
    Pour un truc basique ceci devrait amplement suffire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    list.setCellRenderer(new DefaultListCellRenderer() {
    	public Component getListCellRendererComponent(JList list,
                Object value,
                int index,
                boolean isSelected,
                boolean cellHasFocus) {
    		MyData data = (MyData)value;
    		String text = data.getNom() + " : " + data.getDate();
    		return super.getListCellRendererComponent(list, text, index, isSelected, cellHasFocus);
    	}
    });


    a++

  3. #3
    Membre régulier Avatar de Fahelis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 77
    Points : 87
    Points
    87
    Par défaut
    Merci beaucoup, j'ai obtenu ce que je souhaitais grâce à tes conseils
    Pensez au bouton quand votre problème est réglé afin de ne pas faire perdre leur temps aux gens qui essayent gentiment d'aider les autres

  4. #4
    Membre régulier Avatar de Fahelis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 77
    Points : 87
    Points
    87
    Par défaut
    Me revoilà à la charge, j'ai "dé-résolu" le sujet (désolé).

    J'ai pensé après coup qu'une boite de dialogue pour afficher ma liste serait nettement mieux que de l'afficher dans un nouveau JPanel.

    Malheureusement la méthode showInputDialog attend comme paramètre un tableau d'objet. Et donc moi avec ma JList (qui fait pourtant tout comme je veux), ben je me retrouve coincé. Et du coup si je met ce que j'ai besoin d'afficher dans un tableau de String, et bien je reviens au problème initial je ne peux plus récupérer mon numéro...

    Que puis-je faire qui combinerait les deux ? Enfin surtout est-ce possible ?
    Pensez au bouton quand votre problème est réglé afin de ne pas faire perdre leur temps aux gens qui essayent gentiment d'aider les autres

  5. #5
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Le tableau d'objets des JOptionPane peuvent contenir des composants Swing... tout simplement.

    a++

  6. #6
    Membre régulier Avatar de Fahelis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 77
    Points : 87
    Points
    87
    Par défaut
    Ce que tu me dis c'est que je peux mettre ma JList en paramètre de ShowInputDialog ? Parce que si c'est ça je n'ai pas du m'y prendre correctement. Ou alors j'ai mal compris ce que tu voulais dire.
    Pensez au bouton quand votre problème est réglé afin de ne pas faire perdre leur temps aux gens qui essayent gentiment d'aider les autres

  7. #7
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Oui le paramètre "message" des JOptionPane peut recevoir n'importe quel composant (entre autres).

    Faut juste faire gaffe parce que je composant sera ajouté dans sa "preferredSize", ce qui peut être très gros pour une JList.
    Il vaut mieux l'ajouter dans un JScrollPane avec une preferredSize fixe.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	JList<Object> list = new JList<>(System.getProperties().entrySet().toArray());
    	JScrollPane scrollableList = new JScrollPane(list);
    	scrollableList.setPreferredSize(new Dimension(400, 400));
    	JOptionPane.showMessageDialog(null, scrollableList);

    Cela marche de la même manière pour toutes les méthodes showXXXDialog().
    Au passage pourquoi un showInputDialog() ? C'est généralement pour demander une saisie utilisateur...


    a++

  8. #8
    Membre régulier Avatar de Fahelis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2014
    Messages : 77
    Points : 87
    Points
    87
    Par défaut
    Pourquoi la méthode showInputDialog ? Tout bêtement parce que l'exemple que j'avais trouvé sur internet était avec un tableau de String et qu'ils utilisaient celle-ci. Voilà donc pourquoi je n'arrivais à rien

    Merci infiniment pour ton aide, tout marche impeccablement et c'est beaucoup plus agréable avec cette boite de dialogue qu'avec ma liste dans un JPanel comme j'avais fais au début.

    Résolu pour de bon cette fois ci.
    Merci encore
    Pensez au bouton quand votre problème est réglé afin de ne pas faire perdre leur temps aux gens qui essayent gentiment d'aider les autres

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

Discussions similaires

  1. [Débutant] Afficher seulement une partie des caractères dans une listwiev
    Par Martipit dans le forum VB.NET
    Réponses: 5
    Dernier message: 01/05/2012, 14h09
  2. [Beamer] Afficher seulement une partie des subsections
    Par gama2ee dans le forum Mise en forme
    Réponses: 1
    Dernier message: 21/09/2007, 23h53
  3. Afficher/Cacher une partie d'une page
    Par frechy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 12/01/2006, 14h18
  4. Afficher / Cacher une partie d'un formulaire
    Par damjal dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/10/2005, 18h10
  5. Exporter seulement une partie des données avec pg_dump ?
    Par Philhz dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 31/07/2004, 09h50

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