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 tutoriel ne fonctionne pas


Sujet :

Composants Java

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut Jtable tutoriel ne fonctionne pas
    Bonjour à tous,

    Je travail actuellement sur les composants de Jtable.
    J'ai testé le code du tutoriel sur les regroupements d'entête sur le lien ci-dessous:
    http://www.crionics.com/products/ope...Examples1.html

    J'ai testé et j'ai du renommé la variable enum par enume (exemple) pour supprimer les erreurs.

    Malheureusement, lors du test, le regroupement ne se fait pas.
    Voir ci joint le test en image.

    Savez vous pourquoi?

    Merci

  2. #2
    Membre confirmé Avatar de javaNavCha
    Homme Profil pro
    EKG Group
    Inscrit en
    Juillet 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : EKG Group
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 311
    Points : 631
    Points
    631
    Par défaut
    Salut
    Est qu'on t'affiche des erreurs de compilation ou des exceptions?
    Si oui lesquelles ?

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Merci javacha4 pour ta réponse.

    Je n'ai aucune erreur de compilation ou d'exception après avoir renommer la variable enum par enume.

  4. #4
    Membre confirmé Avatar de javaNavCha
    Homme Profil pro
    EKG Group
    Inscrit en
    Juillet 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : EKG Group
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 311
    Points : 631
    Points
    631
    Par défaut
    Et enfin est ce que ça a marché ?

  5. #5
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Non, le résultat est l'image écrite sur le premier poste. Il manque le regroupement des entêtes.

  6. #6
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Personnes ?

  7. #7
    Membre éprouvé Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Points : 934
    Points
    934
    Par défaut
    Ah..... pas de code, pas de réponse !
    tu devrais montrer ce que tu fais (qui ne marche pas), peut-être que quelqu'un aura une idée, verra une erreur, proposera un changement ?

  8. #8
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Ah désolé!
    Le code est dans le tutoriel, et j'ai remplacé tous les enum par enume.

    Voici toutes les pages:
    GroupableHeaderExample.java:
    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
    /* (swing1.1beta3)
    *
    * |-----------------------------------------------------|
    * |        |       Name      |         Language         |
    * |        |-----------------|--------------------------|
    * |  SNo.  |        |        |        |      Others     |
    * |        |   1    |    2   | Native |-----------------|
    * |        |        |        |        |   2    |   3    |  
    * |-----------------------------------------------------|
    * |        |        |        |        |        |        |
    *
    */
    //package jp.gr.java_conf.tame.swing.examples;
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.table.*;
     
     
    /**
    * @version 1.0 11/09/98
    */
    public class GroupableHeaderExample extends JFrame {
     
     GroupableHeaderExample() {
       super( "Groupable Header Example" );
     
       DefaultTableModel dm = new DefaultTableModel();
       dm.setDataVector(new Object[][]{
         {"119","foo","bar","ja","ko","zh"},
         {"911","bar","foo","en","fr","pt"}},
       new Object[]{"SNo.","1","2","Native","2","3"});
     
       JTable table = new JTable( dm ) {
         protected JTableHeader createDefaultTableHeader() {
    	return new GroupableTableHeader(columnModel);
         }
       };
       TableColumnModel cm = table.getColumnModel();
       ColumnGroup g_name = new ColumnGroup("Name");
       g_name.add(cm.getColumn(1));
       g_name.add(cm.getColumn(2));
       ColumnGroup g_lang = new ColumnGroup("Language");
       g_lang.add(cm.getColumn(3));
       ColumnGroup g_other = new ColumnGroup("Others");
       g_other.add(cm.getColumn(4));
       g_other.add(cm.getColumn(5));
       g_lang.add(g_other);
       GroupableTableHeader header = (GroupableTableHeader)table.getTableHeader();
       header.addColumnGroup(g_name);
       header.addColumnGroup(g_lang);
       JScrollPane scroll = new JScrollPane( table );
       getContentPane().add( scroll );
       setSize( 400, 120 );   
     }
     
     public static void main(String[] args) {
       GroupableHeaderExample frame = new GroupableHeaderExample();
       frame.addWindowListener( new WindowAdapter() {
         public void windowClosing( WindowEvent e ) {
    	System.exit(0);
         }
       });
       frame.setVisible(true);
     }
    }
    ColumnGroup.java:
    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    import java.util.*;
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.table.*;
     
     
    /**
      * ColumnGroup
      *
      * @version 1.0 10/20/98
      * @author Nobuo Tamemasa
      */
     
    public class ColumnGroup {
      protected TableCellRenderer renderer;
      protected Vector v;
      protected String text;
      protected int margin=0;
     
      public ColumnGroup(String text) {
        this(null,text);
      }
     
      public ColumnGroup(TableCellRenderer renderer,String text) {
        if (renderer == null) {
          this.renderer = new DefaultTableCellRenderer() {
    	public Component getTableCellRendererComponent(JTable table, Object value,
                             boolean isSelected, boolean hasFocus, int row, int column) {
    	  JTableHeader header = table.getTableHeader();
    	  if (header != null) {
    	    setForeground(header.getForeground());
    	    setBackground(header.getBackground());
    	    setFont(header.getFont());
    	  }
              setHorizontalAlignment(JLabel.CENTER);
              setText((value == null) ? "" : value.toString());
    	  setBorder(UIManager.getBorder("TableHeader.cellBorder"));
    	  return this;
            }
          };
        } else {
          this.renderer = renderer;
        }
        this.text = text;
        v = new Vector();
      }
     
     
      /**
       * @param obj    TableColumn or ColumnGroup
       */
      public void add(Object obj) {
        if (obj == null) { return; }
        v.addElement(obj);
      }
     
     
      /**
       * @param c    TableColumn
       * @param v    ColumnGroups
       */
      public Vector getColumnGroups(TableColumn c, Vector g) {
        g.addElement(this);
        if (v.contains(c)) return g;    
        Enumeration enume = v.elements();
        while (enume.hasMoreElements()) {
          Object obj = enume.nextElement();
          if (obj instanceof ColumnGroup) {
            Vector groups = 
              (Vector)((ColumnGroup)obj).getColumnGroups(c,(Vector)g.clone());
            if (groups != null) return groups;
          }
        }
        return null;
      }
     
      public TableCellRenderer getHeaderRenderer() {
        return renderer;
      }
     
      public void setHeaderRenderer(TableCellRenderer renderer) {
        if (renderer != null) {
          this.renderer = renderer;
        }
      }
     
      public Object getHeaderValue() {
        return text;
      }
     
      public Dimension getSize(JTable table) {
        Component comp = renderer.getTableCellRendererComponent(
            table, getHeaderValue(), false, false,-1, -1);
        int height = comp.getPreferredSize().height; 
        int width  = 0;
        Enumeration enume = v.elements();
        while (enume.hasMoreElements()) {
          Object obj = enume.nextElement();
          if (obj instanceof TableColumn) {
            TableColumn aColumn = (TableColumn)obj;
            width += aColumn.getWidth();
            width += margin;
          } else {
            width += ((ColumnGroup)obj).getSize(table).width;
          }
        }
        return new Dimension(width, height);
      }
     
      public void setColumnMargin(int margin) {
        this.margin = margin;
        Enumeration enume = v.elements();
        while (enume.hasMoreElements()) {
          Object obj = enume.nextElement();
          if (obj instanceof ColumnGroup) {
            ((ColumnGroup)obj).setColumnMargin(margin);
          }
        }
      }
    }
    GroupableTableHeader.java:
    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
    import java.util.*;
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.table.*;
     
     
     
    /**
      * GroupableTableHeader
      *
      * @version 1.0 10/20/98
      * @author Nobuo Tamemasa
      */
     
    public class GroupableTableHeader extends JTableHeader {
      private static final String uiClassID = "GroupableTableHeaderUI";
      protected Vector columnGroups = null;
     
      public GroupableTableHeader(TableColumnModel model) {
        super(model);
        setUI(new GroupableTableHeaderUI());
        setReorderingAllowed(false);
      }
     
      public void setReorderingAllowed(boolean b) {
        reorderingAllowed = false;
      }
     
      public void addColumnGroup(ColumnGroup g) {
        if (columnGroups == null) {
          columnGroups = new Vector();
        }
        columnGroups.addElement(g);
      }
     
      public Enumeration getColumnGroups(TableColumn col) {
        if (columnGroups == null) return null;
        Enumeration enume = columnGroups.elements();
        while (enume.hasMoreElements()) {
          ColumnGroup cGroup = (ColumnGroup)enume.nextElement();
          Vector v_ret = (Vector)cGroup.getColumnGroups(col,new Vector());
          if (v_ret != null) { 
    	return v_ret.elements();
          }
        }
        return null;
      }
     
      public void setColumnMargin() {
        if (columnGroups == null) return;
        int columnMargin = getColumnModel().getColumnMargin();
        Enumeration enume = columnGroups.elements();
        while (enume.hasMoreElements()) {
          ColumnGroup cGroup = (ColumnGroup)enume.nextElement();
          cGroup.setColumnMargin(columnMargin);
        }
      }
     
    }
    GroupableTableHeaderUI.java:
    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    import java.util.*;
    import java.awt.*;
    import javax.swing.*;
    import javax.swing.table.*;
    import javax.swing.plaf.basic.*;
     
     
     
    public class GroupableTableHeaderUI extends BasicTableHeaderUI {
     
      public void paint(Graphics g, JComponent c) {
        Rectangle clipBounds = g.getClipBounds();
        if (header.getColumnModel() == null) return;
        ((GroupableTableHeader)header).setColumnMargin();
        int column = 0;
        Dimension size = header.getSize();
        Rectangle cellRect  = new Rectangle(0, 0, size.width, size.height);
        Hashtable h = new Hashtable();
        int columnMargin = header.getColumnModel().getColumnMargin();
     
        Enumeration enumeration = header.getColumnModel().getColumns();
        while (enumeration.hasMoreElements()) {
          cellRect.height = size.height;
          cellRect.y      = 0;
          TableColumn aColumn = (TableColumn)enumeration.nextElement();
          Enumeration cGroups = ((GroupableTableHeader)header).getColumnGroups(aColumn);
          if (cGroups != null) {
            int groupHeight = 0;
            while (cGroups.hasMoreElements()) {
              ColumnGroup cGroup = (ColumnGroup)cGroups.nextElement();
              Rectangle groupRect = (Rectangle)h.get(cGroup);
              if (groupRect == null) {
                groupRect = new Rectangle(cellRect);
                Dimension d = cGroup.getSize(header.getTable());
                groupRect.width  = d.width;
                groupRect.height = d.height;    
                h.put(cGroup, groupRect);
              }
              paintCell(g, groupRect, cGroup);
              groupHeight += groupRect.height;
              cellRect.height = size.height - groupHeight;
              cellRect.y      = groupHeight;
            }
          }      
          cellRect.width = aColumn.getWidth() + columnMargin;
          if (cellRect.intersects(clipBounds)) {
            paintCell(g, cellRect, column);
          }
          cellRect.x += cellRect.width;
          column++;
        }
      }
     
      private void paintCell(Graphics g, Rectangle cellRect, int columnIndex) {
        TableColumn aColumn = header.getColumnModel().getColumn(columnIndex);
        TableCellRenderer renderer = aColumn.getHeaderRenderer();
        Component component = renderer.getTableCellRendererComponent(
          header.getTable(), aColumn.getHeaderValue(),false, false, -1, columnIndex);
        rendererPane.add(component);
        rendererPane.paintComponent(g, component, header, cellRect.x, cellRect.y,
    				cellRect.width, cellRect.height, true);
      }
     
      private void paintCell(Graphics g, Rectangle cellRect,ColumnGroup cGroup) {
        TableCellRenderer renderer = cGroup.getHeaderRenderer();
        Component component = renderer.getTableCellRendererComponent(
          header.getTable(), cGroup.getHeaderValue(),false, false, -1, -1);
        rendererPane.add(component);
        rendererPane.paintComponent(g, component, header, cellRect.x, cellRect.y,
    				cellRect.width, cellRect.height, true);
      }
     
      private int getHeaderHeight() {
        int height = 0;
        TableColumnModel columnModel = header.getColumnModel();
        for(int column = 0; column < columnModel.getColumnCount(); column++) {
          TableColumn aColumn = columnModel.getColumn(column);
          TableCellRenderer renderer = aColumn.getHeaderRenderer();
          Component comp = renderer.getTableCellRendererComponent(
            header.getTable(), aColumn.getHeaderValue(), false, false,-1, column);
          int cHeight = comp.getPreferredSize().height;
          Enumeration enume = ((GroupableTableHeader)header).getColumnGroups(aColumn);      
          if (enume != null) {
            while (enume.hasMoreElements()) {
              ColumnGroup cGroup = (ColumnGroup)enume.nextElement();
              cHeight += cGroup.getSize(header.getTable()).height;
            }
          }
          height = Math.max(height, cHeight);
        }
        return height;
      }
     
      private Dimension createHeaderSize(long width) {
        TableColumnModel columnModel = header.getColumnModel();
        width += columnModel.getColumnMargin() * columnModel.getColumnCount();
        if (width > Integer.MAX_VALUE) {
          width = Integer.MAX_VALUE;
        }
        return new Dimension((int)width, getHeaderHeight());
      }
     
      public Dimension getPreferredSize(JComponent c) {
        long width = 0;
        Enumeration enumeration = header.getColumnModel().getColumns();
        while (enumeration.hasMoreElements()) {
          TableColumn aColumn = (TableColumn)enumeration.nextElement();
          width = width + aColumn.getPreferredWidth();
        }
        return createHeaderSize(width);
      }
    }
    Merci

  9. #9
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Personnes?

  10. #10
    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
    Pour faire simple, c'est un hack qui a été créé à l'époque de la version 1.1 de Swing, et que ne fonctionne plus dans les versions actuelles. En effet il est bien trop présomptueux quant à l'implémentation du TableHeader, de son UI et surtout du Renderer utilisé. Or les Renderer ont beaucoup changé depuis. De fait c'est incompatible avec la version 6 de java. Rien que de par l'intégration des mécanismes de tri dans la JTable.

    Passe à autre chose ou développe ton propre composant, ça ira plus vite.

  11. #11
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Merci Sinok, pour ta réponse.

    Connais-tu un framework fonctionnant avec les versions actuels sur les composant Jtable?
    Jtable me parait très intéressant pour les applications que je souhaite faire.

    Avec mon niveau de java, je ne crois pas que je puisse créer un composant tel que Jtable! ou créer un framework me permettant d'utiliser au mieux jtable.

    Si tu as des liens a me proposer je suis preneur

Discussions similaires

  1. [Joomla!] Objet JTable ne fonctionne pas en AJAX
    Par liebenking dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 11/03/2011, 16h53
  2. [eCommerce] Tutoriel qui ne fonctionne pas
    Par nicolasferraris dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 11/08/2010, 15h22
  3. Afficher Form2, masquer Form1 : tutoriel ne fonctionne pas
    Par Hemophilius dans le forum C++/CLI
    Réponses: 3
    Dernier message: 25/08/2008, 17h54
  4. Tutoriel de siddh ne fonctionne pas!
    Par jfox dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 18/03/2008, 11h06
  5. tutoriel qui ne fonctionne pas avec glassfish
    Par dev7 dans le forum Glassfish et Payara
    Réponses: 1
    Dernier message: 13/04/2007, 17h25

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