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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé 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
    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 ?

  2. #2
    Expert éminent
    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
    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 confirmé 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
    Par défaut
    Merci beaucoup, j'ai obtenu ce que je souhaitais grâce à tes conseils

  4. #4
    Membre confirmé 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
    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 ?

  5. #5
    Expert éminent
    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
    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 confirmé 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
    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.

+ 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