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 :

[JTable]sauvegarder column


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut [JTable]sauvegarder column
    Bonjour,

    J'aimerais savoir s'il est possible de sauvegardé l'état des colonnes de mon JTable dans un fichier (config.ini) par exemple.

    a savoir sauvegarder pour le moment la position des colonnes, et par la suite la taille des différentes colonnes. Sachant que mon principale pb, c que je passe par les Properties de java et que ces dernières ne permette de sauvgarder que des String...

    voila si qq1 a une idée, ou l'a déjà fait ca m'interesse

    tchÔ

  2. #2
    Membre émérite
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Par défaut
    Je considére que tu utilises un TableModel,
    le table model lui utilise un systeme de coordonée fixe, alors que la jtable utilise un systeme qui varie dés que l'utilisateur ou le programme change l'ordre des colonnes. cependant la JTable conserve un mapping entre la version "courante" et la version "fixe"


    ..... (partie suprimée car erronée, cf plus bas)

  3. #3
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    ok pour tes explications et merci


    donc question suivante
    comment, a partir d'un string du type "2,1,3"
    formatter mon TableColumn, qui d'ailleurs une classe héritant de AbstractTableColumn au passage, pour que les colonnes soient bien placées ?

  4. #4
    Membre émérite
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Par défaut
    Bon je viens de tester ce que je t'ai dis,
    voila une classe que je viens d'écrire pour manipuler l'ordre des colonnes, j'espere pouvoir l'utiliser un jour au boulot car sinon c mon patron qui va pas être content

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    package xxxx.util.swing;
     
    import  java.util.*; 
    import  javax.swing.*; 
    import  javax.swing.table.*; 
     
    /** 
     * Permet de récuperer/positionner l'ordre des colonnes d'une table
     * @author  divxdede 
     */ 
    public class TableColumnOrderManager 
    { 
       /** Récupere l'ordre des colonnes sous la forme "2,0,1" 
        *  Donne l'ordre courant par rapport à l'ordre d'origine de la TableModel 
        *  @return Ordre courant des colonnes (ex: "2,0,1") 
        **/ 
       public static String getTableOrder(JTable table) 
       {  String Result = ""; 
          int nbrColumns = table.getColumnCount(); 
     
          for(int i  = 0 ; i < nbrColumns ; i++) 
          {  int realColumn = table.getColumnModel().getColumn(i).getModelIndex();
     
             Result += realColumn; 
             if(i < nbrColumns - 1) Result +=","; 
          } 
          return Result; 
       } 
     
       /** Réordonne les colonnes d'une table 
        *  IMPORTANT les numero dans "2,0,1" se refere à la position d'origine du TableModel 
        *  @param order Ordre souhaité par rapport à l'origine
        *  @param table La JTable à réordonner 
        **/ 
       public static void setTableOrder(String order,JTable table) 
       {  
          ArrayList expected = makeOrderList(order); 
          ArrayList having   = makeOrderList( getTableOrder(table) ); 
     
          for(int i = 0 ; i < table.getColumnCount() ; i++) 
          { 
            Integer valExpected = (Integer)expected.get(i); 
            Integer valHaving   = (Integer)having.get(0); 
     
            if( valExpected.intValue() == valHaving.intValue() ) 
            { having.remove(0); 
              continue; 
            } 
     
            int posExpectedOnCurrent = having.indexOf(valExpected); 
     
            System.out.println("Move column " + (posExpectedOnCurrent + i) + " to " + i); 
            having.remove(posExpectedOnCurrent); 
     
            table.moveColumn( posExpectedOnCurrent + i , i ); 
          } 
        } 
     
       /** Restaure les colonnes à leur position d'origine
        *  @param table JTable dont ont veux restaurer la position des colonnes
        **/ 
       public static void restoreTableOrder(JTable table) 
       {    String strOrder = "";
            for(int i = 0 ; i < table.getColumnCount() ; i++)
            {   strOrder += i;
                if(i < table.getColumnCount() -1 ) strOrder += ",";
            }
     
            setTableOrder(strOrder,table);
       }
     
     
        /** Méthode interne pour générer une liste d'ordre **/ 
        private static ArrayList makeOrderList(String strList) 
        {   ArrayList result = new ArrayList(); 
     
            StringTokenizer tokenizer = new StringTokenizer(strList, ","); 
            while(tokenizer.hasMoreTokens()) 
            { String  token = tokenizer.nextToken(); 
              Integer value = new Integer( Integer.parseInt(token) ); 
              result.add(value); 
            } 
     
            return result; 
        } 
    }
    le principe est simple

    un exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      /** Sauve l'ordre actuel des colonnes la table **/
      String saveOrder = TableColumnOrderManager.getTableOrder(maTable);
     
      /** Modifier l'ordre **/
      TableColumnOrderManager.setTableOrder("3,2,1,0",maTable)
     
      /** Réinitialiser l'ordre par défaut **/
      TableColumnOrderManager.restoreTableOrder(maTable);
     
      /** Modifier l'ordre avec celui sauvegardé au début **/
      TableColumnOrderManager.setTableOrder(saveOrder,maTable)

  5. #5
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    cool je testerais tout ca ce soir, car si mon patron me voir faire ca, il va pas etre content non plus

    merci bcp, je te tiens au courant

  6. #6
    Membre émérite
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Par défaut
    si ca reponds a tes questions , n'oublie pas le résolu

  7. #7
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    oui oui t'inquiète mais ce soir si ca marche en attendant de pouvoir tester

  8. #8
    Membre émérite
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Par défaut
    Plus besoin d'adapter la méthode getValueAt de la tableModel,
    j'ai trouvé où recuperer directement l'information,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      table.getColumnModel().getColumn(X).getModelIndex();
    on récupere ainsi le n° de la colonne que la colonne X avait à l'origine.

    J'ai éditer la classe que je te donnais pour utiliser ce systeme.
    a+

  9. #9
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    terrible t un prince je t'en demandais pas tant mais vraiment merci...
    si tu veux encore l'optimiser n'hesites pÔ

  10. #10
    Membre émérite
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Par défaut
    J'ai modifié le nom des méthodes pour être plus "propres"
    et rajouté la méthode "restoreTableOrder" qui remet les colonnes dans l'ordre initiale

    initiale = Ordre définit par la TableModel (Ordre définit par le programmeur)

    Si je fais ca, c'est parceque travail actuellement sur un module JTable et que je viens de trouver une application à cette classe.
    Et si ca peut aider quelqu'un

  11. #11
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    bah ouep moi par exemple

    merci encore

  12. #12
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    bon bah c ok, ca marche nickel, il fallait juste que je change mes renderer de mes cellules qui se basaient sur le numéro de la colonne et pas sur la position de colonne donc voila mise a part ce chtit détails c nickel ca a marché du premier coup...faudrait limite le mettre dans les sources java

  13. #13
    Membre émérite
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Par défaut
    Yep, je vais le mettre dans le thread consacré au code source

  14. #14
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    je viens juste de le faire et je t'ai cité qd meme c la moindre des choses

  15. #15
    Membre émérite
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Par défaut
    Je viens de la voir !!
    j'aurais pas fait mieux !!!

    bon maintenant faut que je regle ces problemes d'enter sur ma JTable

  16. #16
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    c koi t pb d'enter ?

  17. #17
    Membre émérite
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Par défaut
    je veux changer le comportement de la touche enter de la JTable.
    Pour ce faire je creer une Action qui utilise l'action de base de la touche Tab pour faire ce que je veux.
    je l'inscrit sur la touche enter.

    la touche enter fonctionne comme je l'entend quand je suis dans la JTable.
    Mais lors d'une edition (dans mon editor) et que je fais ENTER, mon composant d'edition gere la touche mais pas la JTable du coups mon action n'est pas réalisée la JTable va sur la cellule du bas.

  18. #18
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    tu ne pas implémenter la gestion de la touche Enter dans ton editor pour qu'il transmette l'action à la JTable, enfin je suppose que tu as déjà essayé ...

  19. #19
    Membre émérite
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Par défaut
    j'ai bien essayé, mais c'est comment faire cette transmission de facon propre que je n'arrive pas a faire.

    en fait j'aimerais rééllement surcharger la navigation par défaut de la JTable lors d'une fin d'edition.
    Mais je ne trouve pas où faire ça.

  20. #20
    Membre éclairé Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Par défaut
    la comme ca a froid en sortant du c# je vois

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

Discussions similaires

  1. Sauvegarde de données a partir de JTable
    Par liliya14 dans le forum 2D
    Réponses: 0
    Dernier message: 13/12/2008, 21h56
  2. Jtable et sauvegarde de la taille des colonnes
    Par Lethal dans le forum Composants
    Réponses: 5
    Dernier message: 09/10/2007, 15h42
  3. Row Header + Column Header dans un JTABLE
    Par crakos dans le forum Composants
    Réponses: 3
    Dernier message: 06/08/2007, 18h20
  4. [JTable] Obtenir le N° de lignes et column cliquée
    Par Stef-78 dans le forum Composants
    Réponses: 3
    Dernier message: 10/09/2006, 18h59
  5. [debutant][serialisation ][jtable]pb de sauvegarde
    Par ould dans le forum Composants
    Réponses: 19
    Dernier message: 20/07/2004, 09h09

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