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 et multi-lignes dans les cellules


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 46
    Par défaut [Resolu]Jtable et multi-lignes dans les cellules
    Voici mon code :

    Le modèle de 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
     
    import javax.swing.table.*;
     
    public class PlanningModel
        extends AbstractTableModel {
     
      String[] columnNames = {"Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"};
     
      Object[][] data = null;
     
     
      public PlanningModel(int l, int c) {
        super();
        data = new Object[l][c];
      }
     
      public int getColumnCount() {
        return columnNames.length;
      }
     
      public Object getValueAt(int l, int c) {
        return data[l][c];
      }
     
      public void setValueAt(Object val, int l, int c) {
        data[l][c] = val;
      }
     
     public int getRowCount() {
        return data.length;
      }
     
      public String getColumnName(int c) {
        return columnNames[c];
      }
     
      public Class getColumnClass(int c) {
        try {
          return getValueAt(0, c).getClass();
        }
        catch (Exception ex) {
          return "".getClass();
        }
      }
     
      public boolean isCellEditable(int r, int c) {
          return false;
      }
     
    }
    Le TableCellRenderer :

    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
     
    import javax.swing.JLabel;
    import javax.swing.JTable;
    import javax.swing.table.TableCellRenderer;
    import java.awt.Color;
    import java.awt.Component;
    import java.util.Date;
    import javax.swing.BoxLayout;
    import javax.swing.JTextArea;
     
     
    public class PlanningColorRenderer extends JTextArea
                               implements TableCellRenderer {
     
        protected Date now;
        protected int day;
     
        public PlanningColorRenderer(Date now, int nbRow, int nbCol) {
          super(nbRow, nbCol);
          this.now = now;
          setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
          setOpaque(true);
        }
     
        public Component getTableCellRendererComponent(
                                JTable table, Object value, boolean selected, boolean focused, int row, int column)  {
     
     
          if (row % 2 == 0) {
            setBackground(new Color(184, 184, 184));
            table.setRowHeight(row, 13);
     
            setText(row +" "+column);
          }
          else {
            setBackground(Color.white);
            table.setRowHeight(row, 74);
     
            setText(row +"\n"+column);
          }
     
     
          return this;
        }
     
        private void setData(String text, int align){
          JLabel label = new JLabel();
          label.setText(text);
          label.setHorizontalAlignment(label.LEFT);
     
          add(label);
        }
    }
    Une partie du code pour afficher la jtable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        JTable jTable1 = new JTable(planningModel);
        PlanningColorRenderer planningColorRenderer = new PlanningColorRenderer(currentDate,10,7);
        jTable1.setDefaultRenderer(String.class, planningColorRenderer);
        jTable1.setRowSelectionAllowed(false);
     
        jPanel2.add(jScrollPane1, java.awt.BorderLayout.CENTER);
        jScrollPane1.getViewport().add(jTable1);
    La question ou plutot le problème :
    Tout marche bien en apparence, sauf que j'ai une boucle infinie dans la méthode getTableCellRendererComponent de la classe PlanningColorRenderer.

    Est ce que quelqu'un à une idée ? Est ce mon modèle qui pose problème ?

    Merci de votre aide

  2. #2
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
          if (row % 2 == 0) { 
            setBackground(new Color(184, 184, 184)); 
            table.setRowHeight(row, 13); 
     
            setText(row +" "+column); 
          } 
          else { 
            setBackground(Color.white); 
            table.setRowHeight(row, 74); 
     
            setText(row +"\n"+column); 
          }
    Je ne vois pas pourquoi tu définis les hauteurs de lignes dans le renderer. Tu devrais les définir dès que tu crées ton instance de JTable.
    Le bouclage infini vient de là : dans le renderer, tu modifies la hauteur de la ligne, ce qui oblige la JTable à réactualiser la vue (et pour cause), d'où appel à revalidate() et repaint(), qui lui-même appelle... le renderer... etc.

  3. #3
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 46
    Par défaut
    Merci j'ai suivi tes conseils tout marche bien maintenant.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/02/2011, 11h50
  2. retour à la ligne dans les cellules d'une datagrid
    Par johnaliashead dans le forum Silverlight
    Réponses: 1
    Dernier message: 07/10/2010, 15h00
  3. Retour à la ligne dans les cellules de mon gridview
    Par rohstev dans le forum ASP.NET
    Réponses: 1
    Dernier message: 24/03/2009, 23h01
  4. JTable avec des JPanel dans les cellule
    Par pigpen dans le forum Composants
    Réponses: 11
    Dernier message: 13/04/2006, 19h58
  5. [JTable] Saut de ligne dans la cellule d'une JTable
    Par enocet dans le forum Composants
    Réponses: 3
    Dernier message: 15/12/2005, 13h16

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