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 :

Copie des colonnes JTable


Sujet :

Composants Java

  1. #1
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Copie des colonnes JTable
    Bonjour,

    Je développe une application en java. J'ai un fichier Excel à importer et je l'affiche dans une JTable avec plusieurs colonnes. J'ai une autre JTable où je dois choisir juste les colonnes avec le header et les valeurs de chacune. Je me suis coincée à cette étape. J'ai besoin de votre aide.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu as une JTable avec des données importées d'Excel. Et tu voudrais pouvoir afficher dans une autre JTable certaines des colonnes de la première JTable, c'est ça ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    oui exactement ce que je voudrai faire

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Question supplémentaire : est-ce qu'on peut changer les colonnes comme on veut après l'affichage, ou alors c'est avant l'affichage, et puis après ça reste tout le temps comme ça.

    Dans le deuxième cas, c'est assez simple. Le principe est d'encapsuler le modèle de la première JTable dans un modèle qui va filtrer les colonnes, avec un simple pseudo-mapping.

    Tu passes en paramètres un tableau des index de colonnes à afficher : par exemple, pour afficher les colonnes 1, 5 et 19, tu passes new ColumnFilterModel(model, 1, 5, 19), ou model est le modèle de la première table

    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
    public class ColumnFilterModel extends AbstractTableModel {
     
    	private TableModel model;
    	private int[] visibleColumns;
     
    	public ColumnFilterModel(TableModel model, int...visibleColumns) {
    		this.model=model;
    		this.visibleColumns=visibleColumns;
    	}
     
    	@Override
    	public int getRowCount() {
    		return model.getRowCount();
    	}
     
    	@Override
    	public int getColumnCount() {
    		return visibleColumns.length;
    	}
     
    	@Override
    	public String getColumnName(int columnIndex) {
    		return model.getColumnName(visibleToIndex(columnIndex));
    	}
     
    	@Override
    	public Class<?> getColumnClass(int columnIndex) {
    		return model.getColumnClass(visibleToIndex(columnIndex));
    	}
     
    	@Override
    	public boolean isCellEditable(int rowIndex, int columnIndex) {
    		return model.isCellEditable(rowIndex, visibleToIndex(columnIndex));
    	}
     
    	@Override
    	public Object getValueAt(int rowIndex, int columnIndex) {
    		return model.getValueAt(rowIndex, visibleToIndex(columnIndex));
    	}
     
    	@Override
    	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    		model.setValueAt(aValue, rowIndex, visibleToIndex(columnIndex));
    	}
     
    	private int visibleToIndex(int columnIndex) {
    		return visibleColumns[columnIndex];
    	} 
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    J'ai oublié de te poser une question : les données doivent-elles changer après affichage ? Peut-on par exemple les éditer ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Non il n'y aura pas de modification juste la sélection des colonnes d'une JTable1 et les afficher dans JTable2 , alors je vais tester ton code et j'y reviendrai pour te répondre si ça va marcher.

  7. #7
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Désolé je suis débutante mais j'ai pas bien compris le code ou dois-je l'implémenter , parce que j'ai mis un boutton qui va servir à me copier les colonne , par exemple quand je clique sur une colonne de JTable1 je clique sur OK et la colonne va se copier dans JTable2 .

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par houda1417 Voir le message
    Désolé je suis débutante mais j'ai pas bien compris le code ou dois-je l'implémenter , parce que j'ai mis un boutton qui va servir à me copier les colonne , par exemple quand je clique sur une colonne de JTable1 je clique sur OK et la colonne va se copier dans JTable2 .
    Je t'ai demandé justement si c'était interactif : ce que je t'ai donné là, c'est pour un mode static, pas interactif. C'est beaucoup plus compliqué en mode interactif. Tu peux éventuellement t'inspirer de ce que j'ai fait pour le mode static, en remplaçant le tableau par une Map par exemple, et en soulevant un fireTableStructureChanged à chaque ajout/suppression de colonne, mais aussi mettre à jour le ColumnModel. Ce n'est pas à la portée d'un débutant, sans étudier déjà au préalable le fonctionnement de la JTable, de son TableModel et de son TableColumnModel.
    Éventuellement, solution un peu bidouille, tu recréer un modèle à chaque fois. S'il n'y a pas trop de données, ça ne devrait pas trop se voir.

    Le principe de ce que je t'ai donnée comme code :

    1. Tu as une JTable avec tes données de Excel, mettons que tu aies une variable qui s'appelle excelTable qui pointe dessus ;
    2. Cette table à un modèle qu'on peut obtenir avec excelTable .getModel();
    3. Tu as une autre JTable où tu affiches certaines colonnes : mettons que la variable soit table : pour créer cette JTable, tu as juste besoin de faire table=new JTable();
    4. Ensuite, il s'agit de créer un ColumnFilterModel. Il te faut maintenir une liste des index de colonnes sélectionnées dans excelTable. Mettons List<Integer> listeColonnes =new ArrayList<>();. Pour ajouter la colonne d'index i, il te suffit de faire listeColonnes.add(i);.
    5. tu peux créer un ColumnFilterModel simplement en faisant :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      int[] array=new int[listeColonnes.size()];
      for(int i=0; i<array.length; i++) {
          array[i]=listeColonnes.get(i);
      }
      ColumnFilterModel filterModel = new ColumnFilterModel(excelTable .getModel(), array);
    6. Ensuite, tu affectes ce modèle à la JTabel : table.setModel(filterModel)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Copie des colonnes
    Par chito79000 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/08/2015, 09h48
  2. Problème : copie des colonnes d'un onglet vers l'onglet actif
    Par aziz1015 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/08/2015, 18h39
  3. Noms des colonnes jtable
    Par neutrall dans le forum Composants
    Réponses: 1
    Dernier message: 06/06/2011, 09h20
  4. [JTable] les noms des colonnes de s'affichent pas
    Par macben dans le forum Composants
    Réponses: 6
    Dernier message: 25/04/2008, 11h03
  5. la taille des colonne jtable
    Par minooo dans le forum Composants
    Réponses: 3
    Dernier message: 14/12/2007, 15h06

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