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 - Inversion des Colonnes <--> Lignes


Sujet :

Composants Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Points : 121
    Points
    121
    Par défaut JTable - Inversion des Colonnes <--> Lignes
    Bonjour.

    Pour une question d'optimalisation de la surface d'un des mes panneaux GUI, cela m'arrangerait vraiment que mon étroite table (2 colonnes / bcp de lignes) soit plutôt horizontale que verticale, soit
    - 2 lignes / bcp de colonnes
    - Les titres d'entête non au-dessus mais sur le côté gauche.
    - Sélection de colonne plutôt que de ligne (en bleu clair)
    Comme si la table avait pivoté sur l'une de ses diagonales.
    (La table est ensuite insérée dans un JScrollPane)

    J'utilise en fait la classe JTable du package javax.swing de la plateforme Java SE 6 ...
    Je ne vois ni propriété, ni méthode, ni modèle ... pour effectuer ce pivotement.
    N'est-ce pas réalisable en Java SE et Swing ?

    Je pensais que ce pivotement constituait une fonctionnalité largement requise.
    Merci pour toute réponse utile.
    "Ah oui ! Juste encore cette toute dernière petite question ..." (Columbo - Peter Falk)

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Points : 1 212
    Points
    1 212
    Par défaut
    Bonjour,

    Et pourquoi ne pas construire ta table différemment ? C'est-à-dire faire ton inversion ligne/colonne non pas sur la JTable une fois créée, mais au moment de l'initialisation. Cela me semble d'une part plus facile, et d'autres part plus logique...

    Mako.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Points : 121
    Points
    121
    Par défaut
    Cher Mako 5013;

    C'est bien dès la création et initialisation de la table que je cherche à effectuer cette inversion, de là :
    - Les titres d'entête non au-dessus mais sur le côté gauche.
    - Sélection de colonne plutôt que de ligne (en bleu clair)

    En fait, je ne suis pas sûr de bien te comprendre. Peux-tu expliciter un peu plus ?

    Solution ?: Création d'une classe propriétaire héritant de JTable et inversant les propriétés lignes et colonnes ? Qqn l'a déjà réalisée ? Exemple de code ...

    Merci.
    "Ah oui ! Juste encore cette toute dernière petite question ..." (Columbo - Peter Falk)

  4. #4
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    C'est jouable, pour ce la il faut:

    1. Que ton modèle soit organisé de la bonne façon (deux lignes et plein de colonnes)
    2. Que tu autorise la séléction par colonne uniquement (setColumnSelectionAllowed(true), setRowSelectionAllowed(false))
    3. Et pour le header à gauche, il faut créer une seconde JTable contenant les headers et la mettre dans le rowHeader du JScrollPane (méthode setRowHeader)
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 263
    Points : 121
    Points
    121
    Par défaut
    Merci, sinok
    ... pour ta proposition de solution que je tenterai de mettre en oeuvre.

    Dans un autre forum (http://www.coderanch.com/t/558125/GU...ersion#2532743), l'on m'a proposé deux autres possibles solutions à investiguer qui valent aussi la peine d'être essayées. Intéressant.

    Pourquoi diable Java Sun n'a pas inclu cette 'Frequently Asked Functionnality' dès le départ ?
    Je n'ai pas encore trouvé cette 'table pivotée' dans une librairie tierce.
    Je posterai ici le code dès que je l'aurai trouvé ou développé.
    Donc pas encore de 'résolu' et je tiens cette discussion volontairement ouverte "un certain temps".

    Merci à tous.
    "Ah oui ! Juste encore cette toute dernière petite question ..." (Columbo - Peter Falk)

  6. #6
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut
    Citation Envoyé par Chavadam Voir le message
    - Les titres d'entête non au-dessus mais sur le côté gauche.
    Citation Envoyé par sinok Voir le message
    C'est jouable, pour ce la il faut:

    1. Et pour le header à gauche, il faut créer une seconde JTable contenant les headers et la mettre dans le rowHeader du JScrollPane (méthode setRowHeader)
    Pour ce point tu trouveras un exemple dans le codes sources java de dvp :
    http://java.developpez.com/telecharg...onnesFixes-zip

    Dans l'exemple, le titre des lignes n'a pas le même aspect que le titre des colonnes. Il faudra appliquer un CellRenderer :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
     public class FixedTableCellRenderer extends DefaultTableCellRenderer
    {
        private Dimension dim = new Dimension();
     
        public FixedTableCellRenderer()
        {
            setHorizontalAlignment(CENTER);
            setVerticalAlignment(CENTER);
        }
     
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value,
                          boolean isSelected, boolean hasFocus, int row, int column)
        {
            JTableHeader header;
     
            header = table.getTableHeader();
     
            this.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
     
            this.setOpaque(true);
            this.setForeground(header.getForeground());
            this.setBackground(header.getBackground());
            this.setFont(header.getFont());
     
            dim.height = table.getRowHeight();
            dim.width = header.getWidth();
            this.setPreferredSize(dim);
     
            this.setText((String)value);
     
            return this;
        }
    }

  7. #7
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Si tu veux la jouer fine et garder tes données organisées dans le sens initial, tu peux créer un modèle dont le rôle est de réaliser une transposée d'un autre modèle (donc qui va redéfinir toutes les méthodes du modèle en inversant les paramètre de lignes et de colonnes).

    La première solution proposée est probablement la plus "state of the art". Par contre elle sera très longue à mettre en place.

    La seconde est juste une version pas géniale de la mienne.


    Pour supprimer les headers d'une JTable il suffit de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monScrollPane.setColumnHeaderView(null);
    Pour ajouter des entêtes au niveau des lignes il te faut créer une JTable contenant uniquement tes entêtes de ligne, puis de l'ajouter au rowHeader du JScrollPane
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monScrollPane.setRowHeaderView(maTableEntete);
    Et le taf sera fait.

    Exemple pour le rowHeaderView: http://tips4java.wordpress.com/2008/...-number-table/
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

Discussions similaires

  1. [2008] Inversion des colonnes et des lignes sur une table
    Par anonymous-slacker dans le forum Développement
    Réponses: 4
    Dernier message: 18/03/2015, 18h08
  2. Etat avec inversion des colonnes en lignes !
    Par el_aaroubi dans le forum WinDev
    Réponses: 8
    Dernier message: 11/04/2013, 23h16
  3. [JTable] Tri des colonnes
    Par djskyz dans le forum Composants
    Réponses: 10
    Dernier message: 17/03/2005, 10h14
  4. [VB.NET] DataGrid : titre des colonnes sur deux lignes
    Par Lahouari dans le forum Windows Forms
    Réponses: 6
    Dernier message: 06/12/2004, 14h44
  5. [JTable] Dimension des colonnes
    Par Katyucha dans le forum Composants
    Réponses: 4
    Dernier message: 04/11/2004, 16h53

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