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] : CellEditor


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de Hug0_76
    Profil pro
    Inscrit en
    Août 2006
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 292
    Par défaut [JTABLE] : CellEditor
    Bonjour à tous,

    Depuis qqs jours j'essaye en vain d'afficher dans une MEME (j'insiste sur le même) colonne de ma JTable des JComponents tels que JComboBox, JCheckBox....

    J'ai cherché sur le forum => aucune solution
    J'ai cherché sur le site de sun (TABLE) => aucune solution

    Mon but étant d'avoir un ColumnModel capable de gérer tous les types suivant (JCheckBox, JComboBox, JButton, JRadioButton).

    Qq1 a t-il déjà développé ce genre de classe pour m'aider svp????

    Merci

  2. #2
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 31
    Par défaut
    Bonjour Hug0_76,

    Est-ce que tu as déjà regarder du coté de la classe DefaultTableCellRenderer avec la méthode getTableCellRendererComponent() à surcharger ?

    A mon avis tu peus essayer ce petit code :
    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
    public class MyTable extends JTable {
     
        /** Creates a new instance of MyTable */
        public MyTable() {
            super();
            setDefaultRenderer(Object.class, new MyCellRenderer());
            //setDefaultEditor(Object.class, new MyCellEditor());
        }
     
    }
     
    class MyCellRenderer extends DefaultTableCellRenderer {
     
            public Component getTableCellRendererComponent(JTable table, Object obj, boolean sel, boolean foc, int row, int col) {
     
                JLabel lbl = null;
                JCheckBox chk = null;
                JComboBox cmb = null;
                JButton btn = null;
                JRadioButton rdb = null;
     
                switch (row) {
                    case 0:
                        lbl = new JLabel();
                        return lbl;
                        break;
                    case 1:
                        chk = new JCheckBox();
                        return chk;
                        break;
                    case 2:
                        cmb = new JComboBox();
                        return cmb;
                        break;
                    case 3:
                        btn = new JButton();
                        return btn;
                        break;
                    case 4:
                        rdb = new JRadioButton();
                        return rdb;
                        break;
                    default :
                        lbl = new JLabel();
                        return lbl;
                }
            }
    }
    Avec ce code, normalement tu devrais obtenir dans toutes tes colones à la première ligne des JLabel, la seconde des JCheckBox, la troisième des JComboBox, la quatrième des JButton, la cinquième des JRadioButton et pour toutes les lignes suivantes des JLabel.
    Après, à toi de modifier la méthode getTableCellRendererComponent() pour obtenir le rendu exact que tu veux.

    Pour info si tu veux que l'utilisateur de ton appli puisse agir sur les composants des cellules de ta table, il faut aussi que tu étendes la classe DefaultCellEditor en surchargeant les méthodes getTableCellEditorComponent() et getCellEditorValue().

    Je n'ai pas plus chercher que ça, mais il me semble qu'il y a un tuto sur ce sujet sur le site. Tu devrais le regarder ...

    A+

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Et pour placer un Renderer sur une Colonne spécifique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    maTable.getColumn(i).setCellRenderer(monRenderer);
    maTable.getColumn(i).setCellEditor(monEditor);
    Le tuto que tu as trouvé sur les tables explique le principe des Renderers et Editors.
    ++

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Par défaut
    Par défaut, swing ne permet pas d'avoir plusieurs renderers et editeurs dans une MEME colonne.
    Il te faut alors définir un dictonnaire d'éditeurs et un de renderers qui ont en clé la ligne et en valeur l'éditeur/rendereur.
    Tu trouvera un tuto qui te présente une solution.
    Bonne lecture

  5. #5
    Membre éclairé Avatar de puybaret
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 61
    Par défaut
    Citation Envoyé par Fifan31
    Par défaut, swing ne permet pas d'avoir plusieurs renderers et editeurs dans une MEME colonne.
    En redéfinissant les méthodes getCellRenderer et getCellEditor de JTable, on peut attribuer n'importe quel renderer ou editor à une cellule, non ?

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 253
    Par défaut
    Citation Envoyé par puybaret
    En redéfinissant les méthodes getCellRenderer et getCellEditor de JTable, on peut attribuer n'importe quel renderer ou editor à une cellule, non ?
    Bien sûr, c'est ce qui est présenté dans le lien que j'ai donné

Discussions similaires

  1. Panel dans JTable (CellEditor)
    Par Lady dans le forum Composants
    Réponses: 7
    Dernier message: 17/07/2007, 10h50
  2. JComboBox JTable CellEditor
    Par DjGonk dans le forum Composants
    Réponses: 1
    Dernier message: 29/05/2007, 17h13
  3. JTable et CellEditor
    Par Alexandre dans le forum Composants
    Réponses: 5
    Dernier message: 05/10/2006, 16h19
  4. String CellEditor pour JTable
    Par noussa_nouha dans le forum Composants
    Réponses: 1
    Dernier message: 29/08/2006, 11h28
  5. [JTable] CellEditor
    Par Solovely dans le forum Composants
    Réponses: 3
    Dernier message: 09/07/2005, 11h07

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