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 :

Passer d'un GridLayout à un JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Par défaut Passer d'un GridLayout à un JTable
    Bonjour,
    j'utilise actuellement un GridLayout de trois colonnes pour afficher des données.
    Seulement, je me suis rendu compte que ce Layout n'était pas très modulable. On ne peut par exemple pas faire varier la taille des colonnes.

    Je voudrai donc pouvoir remplacer mon GridLayout par un JTable, mais je ne vois pas trop comment remplir le tableau de données.

    Voici mon code actuel :
    Code java : 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
     
    Box vbox = Box.createVerticalBox();
    for (int i = 0; i < arraylist.size(); i++) {
    	JPanel jp = new JPanel();
    	jp.setBorder(BorderFactory.createTitledBorder(arraylist().get(i)
    			.getNom()));
    	GridLayout gl = new GridLayout(arraylist.get(i).getDonnees().size(), 3);
    	jp.setLayout(gl);
     
    	for(Map.Entry<String, String> entry : arraylist.get(i).getDonnees().entrySet() ) {
    		JLabel label = new JLabel(entry.getKey());
    		JTextField textField = new JTextField(entry.getValue());
    		jp.add(label);
    		jp.add(textField);
    		arrayJt.add(textField);
    	}
    	vbox.add(jp);
     
    }
    Est-il possible de remplacer facilement le GridLayout par un JTable?

    Merci

  2. #2
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    919
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 919
    Par défaut
    Citation Envoyé par floctc Voir le message
    Est-il possible de remplacer facilement le GridLayout par un JTable?
    Bigre ! Ca n'a rien à voir.
    Oublie ton gridbaglayout et construit la table from scratch. C'est facile. Regarde le tuto Swing chez Java.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Par défaut
    Oui, il ne s'agit pas de la même chose, dans un cas c'est un Layout et dans l'autre c'est un composant, mais j'utilise le GridLayout comme un tableau.

    Je voudrai savoir comment transformer les données de ma LinkedHashMap en Object, afin d'obtenir un tableau d'object que je pourrai directement passer au constructeur de mon JTable.

    Vu comment je construis ma boucle, cela est-il possible?
    Je ne voudrai pas avoir à tout recoder...

    Merci

  4. #4
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    919
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 919
    Par défaut
    Tu dois alors développer ton propre modèle de table.
    C'est plutôt facile.

    Il faut notamment implémenter
    public int getRowCount();
    public int getColumnCount();
    public Object getValueAt(int row, int column);


    auxquels tu réponds en te basant sur ton arraylist et ton linkedhashmap.
    La seule difficulté que je vois c'est peut-être ta LinkedHashMap. Tu devrais la remplacer par une List parce que c'est plus facile à accéder via un index numérique comme le sont row et column.

    Après t'as intérêt a implémenter
    getColumnClass(int columnIndex), pour indiquer le type de chaque colonne. Ca aide la jTable à te fournir le bon éditeur
    getColumnName(int column), pour indiquer le nom de chaque colonne, sinon tu as des noms par défaut "A", "B", ...
    isCellEditable(int rowIndex, int columnIndex) pour indiquer les cellules pour lesquels la jTable doit basculer entre le "renderer" et l' "editor"
    setValueAt(Object aValue, int rowIndex, int columnIndex) pour indique ce qu'il faut faire des valeurs modifiées des cellules éditables (ex les rebalancer dans ta arraylist)

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2009
    Messages : 389
    Par défaut
    Merci pour ton explication.

    Je suis parti voir un tutoriel sur les TableModel. Ca n'a pas l'air très compliqué.
    Par contre, à chaque fois dans les exemples, les tableaux sont écrits en dur dans le code, ou générés à partir d'objets.


    Le souci, c'est que moi je ressort chaque élément directement dans la boucle.

    Je récupère ces éléments de ma linkedHashMap, et je ne peux pas changer ce type, ça aurait trop d'impact.

    Je donne un exemple d'une classe fichier représentant un fichier properties. C'est à partir de là que je récupère des éléments pour mon JTable.

    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
     
    public class Fichier {
     
    	private String nom;
    	private LinkedHashMap<String, String> donnees = new LinkedHashMap<String, String>();
     
    	public Fichier(String nom, LinkedHashMap<String, String> donnees) {
    		super();
    		this.nom = nom;
    		this.donnees = donnees;
    	}
     
    	public String getNom() {
    		return nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	public LinkedHashMap<String, String> getDonnees() {
    		return donnees;
    	}
     
    	public void setDonnees(LinkedHashMap<String, String> donnees) {
    		this.donnees = donnees;
    	}
     
    	/**
             * affiche proprement la liste des elements de la LinkedHashMap (suppression des accolades...)
             * nb : possibilité d'utiliser également Map.Entry et entrySet(), mais charge plus lourde dans le code
             * @return la chaine de caractère nettoyée.
             */
    	public String toString() {
    		String str = "";
    		String tab[] = donnees.toString().split(",");
     
    		for (int i = 0; i < tab.length; i++) {
    			tab[i] = tab[i].trim();
    			str += tab[i] + "\n";
    		}
    		str = str.replace("{", "");
    		str = str.replace("}", "");
    		return str;
    	}
     
    	/**
             * convertit la LinkedHashMap en un tableau (pour pouvoir ensuite recuperer
             * la clé ou la valeur, avec split("=")
             * 
             * @return un tableau contenant les associations clé-valeur en un seul
             *         string
             */
    	public String[] getString() {
    		String str = donnees.toString();
    		str = str.replace("{", "");
    		str = str.replace("}", "");
    		String tab[] = str.split(",");
    		return tab;
    	}
     
    }
    Est-il possible, à partir de cette classe, de remplir mon JTable?

    Je commence à douter là, je ne voudrai pas avoir à tout recoder ou passer pl, car la gridLayout convient bien ici (tableau à 2 ou 3 colonnes). Le seul problème, c'est la taille des colonnes non paramétrable...

    Merci de votre aide

  6. #6
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    919
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 919
    Par défaut
    C'est difficile de te répondre tant que tu n'expliques pas le layout de ta table. Quelle colonne reprend quoi ? Une ligne reprend quoi ?

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 26/03/2015, 10h31
  2. Passer variables d'une JTable à une autre sur un Joptionpane
    Par laplumedoie dans le forum Débuter
    Réponses: 4
    Dernier message: 28/02/2014, 18h58
  3. Passer du Pascal à Delphi
    Par poppels dans le forum Langage
    Réponses: 7
    Dernier message: 30/08/2002, 21h07
  4. Réponses: 9
    Dernier message: 12/08/2002, 07h38
  5. Passer en mode 800*600
    Par flavien tetart dans le forum Assembleur
    Réponses: 8
    Dernier message: 30/05/2002, 23h05

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