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] ajouter une colonne spéciale


Sujet :

Composants Java

  1. #1
    Provisoirement toléré
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Points : 76
    Points
    76
    Par défaut [JTable] ajouter une colonne spéciale
    Bonsoir
    j'ai créé un jtable mais je veux ajouter une colonne comme cette image si vous voyez bien que la premiere colonne la fléche se déplcae a chaque fois cliquant sur une ligne
    je n'ai aucune idée comment ajouter cette colonne

    http://www.servimg.com/image_preview...=16&u=11546812

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     String[] columns = { "code ",  "Désignation", "Qte"  };
               model = new DefaultTableModel(columns, 0);
     
               model.addRow(new String[] {"", "", ""});
               model.addRow(new String[] {"", "", ""});
     
               jTable1 = new JTable(model);

  2. #2
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Perso je ferais un TableModel qui renverrait vrai ou faux sur cette colonne, selon que la ligne est sélectionnée ou pas ; puis je me débrouillerais avec un renderer pour l'image.

  3. #3
    Provisoirement toléré
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Points : 76
    Points
    76
    Par défaut
    salut
    mais désolé je t'ai pas compris

  4. #4
    Membre actif Avatar de ze_corsaire
    Inscrit en
    Décembre 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Décembre 2007
    Messages : 240
    Points : 273
    Points
    273

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Points : 327
    Points
    327
    Par défaut
    Pour être un peu plus précis sans donner trop de code, dans ton modèle, il te faudra ajouter une colonne liée à aucune donnée. Puis tu créer une classe implémentant TableCellRender comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class ArrowCellRenderer extends JLabel implements TableCellRenderer
    Dans la méthode getTableCellRendererComponent que tu devras forcément implémenter, tu test si le booléen selected est à true, si c'est le cas tu affiche une image de flèche avec setIcon("img_fleche"), sinon la même image mais sans la flèche.

    Enfin, dans ta classe JTable, tu défini le renderer pour ta première colonne avec la méthode setDefaultRenderer().

    En espérant avoir aidé.

  6. #6
    Provisoirement toléré
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Points : 76
    Points
    76
    Par défaut
    voila ce que j'ai fais

    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
     
    String[] columns = {
         "la colone" "réference", "prix", "Designation_article"};
     model = new DefaultTableModel(columns, 0);
     model.addRow(new String[] {"", "", ""});
     model.addRow(new String[] {"", "", ""});
     
     
     
     t = new JTable(model) {
          public TableCellRenderer getCellRenderer(int row, int column)
                    {
                        return renderer;
                    }
                };
     
     
     
    class CellRenderer extends DefaultTableCellRenderer {
     
       public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
       {
          ImageIcon fléche ;
         JLabel l = new JLabel();
         fléche =new ImageIcon("C:\\1.JPG");
     
                 l.setIcon(fléche);
     
           final Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
     
           if(isSelected) 
                 { 
     
                aucune idée sur affichage icone sur la premiere colone si je click sur ligne 
                 } 
     
           return component;
       }
     
    }
    qui peut m'aider à completer le code

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Points : 327
    Points
    327
    Par défaut
    Salut, voici ton code corrigé pour fonctionner, je le test directement dans une petite JFrame pour voir le résultat :

    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
     
    package org.tests;
     
    import java.awt.Component;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.DefaultTableModel;
     
    public class ArrowJTablePanel extends JPanel {
     
     public final static long serialVersionUID = 1L;
     private static String[] columns = {"la colonne", "réference", "prix", "Designation_article"};
     private static DefaultTableModel model = new DefaultTableModel(columns, 0);
     private static JTable table;
     
     
      public static void main(String[] args) {
        model.addRow(new String[] {null, "ref1", "20€", "blabla"});
        model.addRow(new String[] {null, "ref2", "10€", "ririri"});
        table = new JTable(model);
        table.getColumnModel().getColumn(0).setCellRenderer(new CellRenderer());
     
        // pour tester
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(table);
        frame.pack();
        frame.setVisible(true);
      }
     
     
    static class CellRenderer extends DefaultTableCellRenderer {
     
       public final static long serialVersionUID = 1L;
        @Override
       public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
        {
        // si la ligne est sélectionnée alors on met la flêche
        if (isSelected) {
             ImageIcon fleche = new ImageIcon("C:\\droite.png");
             this.setIcon(fleche);
        } else {
          // sinon aucune image
          this.setIcon(null);
        }
        return this;
      }
    }
     
    }

    Voilà, maintenant tu peux travailler sur le renderer en modifiant les bordures pour donner un effet 3D, en biseautant les bords

  8. #8
    Provisoirement toléré
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Points : 76
    Points
    76
    Par défaut
    salut merci encore voila le 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
     
    class CellRenderer extends DefaultTableCellRenderer { 
     
      public final static long serialVersionUID = 1L; 
     
      public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
       { 
       // si la ligne est sélectionnée alors on met la flêche 
       if (isSelected) { 
            ImageIcon fleche = new ImageIcon("C:\ \1.JPG"); 
            this.setIcon(fleche); 
       } else { 
         // sinon aucune image 
         this.setIcon(null); 
       } 
       return this; 
    } 
    } 
     
     
     
    long serialVersionUID = 1L; 
         String[] columns = {"", "réference", "prix", "Designation_article"}; 
           DefaultTableModel model = new DefaultTableModel(columns, 0); 
     
             model.addRow(new String[] {null, "ref1", "20€", "blabla"}); 
                 model.addRow(new String[] {null, "ref2", "10€", "ririri"}); 
                 t = new JTable(model); 
                 t.getColumnModel().getColumn(0).setCellRenderer(new CellRenderer()); 
     
     
    jS.setPreferredSize(new Dimension(452, 117)); 
      jS.setBounds(new Rectangle(26, 36, 476, 112));

    mais est ce que si possible de mettre image sur jLabel car si je click sur image la cellule sera modifiable et l'image disparu
    et comment rendre les cellules non modifiable

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Points : 327
    Points
    327
    Par défaut
    Salut, "est-ce si possible toi parler français ?"

    Parce qu'il faut bien avouer qu'on a du mal à te comprendre ...

    Bref pour rendre une cellule non-éditable il faut définir ton propre TableModel et redéfinir la fonction isCellEditable(int ligne, int colonne)
    Le plus simple reste d'hériter de DefaultTableModel et de ne redéfinir que cette méthode, exemple :

    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
     
    static class MonModel extends DefaultTableModel {
     
        public MonModel(String[] columns, int i) {
          super(columns, i);
        }
     
        @Override
        public boolean isCellEditable(int row, int column) {
          if (column == 0) {
            return false;
          } else {
            return true;
          }
        } 
    }

  10. #10
    Membre chevronné
    Profil pro
    Développeur Java Indépendant
    Inscrit en
    Mai 2007
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java Indépendant

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 333
    Points : 2 061
    Points
    2 061
    Par défaut
    Pour répondre à la question, je pense qu'il n'y aurait pas de problème en comprenant bien le modèle MVC, voici un tutorial :
    http://baptiste-wicht.developpez.com...ion/mvc/#LII-A

    et un deuxième :

    http://mbaron.developpez.com/javase/javavisu/

    Après tout coule de source...

  11. #11
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 161
    Points : 48
    Points
    48
    Par défaut
    Salut à tous,
    J'ai le même problème: affichage d'une colonne avec icone dans un jTable. Le problème est qu'il m'affiche toutes les cellules du jTable avec l'icone, voici mon code:
    jTableDocuments.setDefaultRenderer(Object.class,new DefaultTableCellRenderer(){

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {
    if(column==0 )
    {
    ImageIcon fleche ;
    //JLabel l = new JLabel();
    fleche =new ImageIcon("C:\\openBlue.png");
    this.setIcon(fleche);
    //jTableDocuments.getColumnModel().getColumn(0).getCellEditor()
    }}});
    Et pour la classe de mon model:

    public class DocumentModel extends AbstractTableModel {

    private ArrayList<Object[]> ResultSets;

    public DocumentModel(ResultSet rs) {

    ResultSets=new ArrayList<Object[]>();
    try{
    while(rs.next()){

    String[] row={
    "", rs.getString("CHEMINFICHIER"), rs.getString("COMMENTAIRES"),rs.getString("NOMDOCUMENT"),rs.getString("NUMORDRE")
    };
    ResultSets.add(row);
    }
    }

    Merci d'avance pour l'aide

Discussions similaires

  1. Ajouter une colonne Checkbox JTable
    Par tunis71187 dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 17/09/2012, 15h29
  2. Réponses: 0
    Dernier message: 13/04/2012, 17h57
  3. [JTable] ajouter une colonne de checkbox
    Par nawel dans le forum Composants
    Réponses: 3
    Dernier message: 04/05/2005, 14h07
  4. Réponses: 4
    Dernier message: 09/02/2005, 10h44
  5. [JTable] redimensionner une colonne
    Par TheSeb dans le forum Composants
    Réponses: 2
    Dernier message: 21/12/2004, 19h30

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