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 :

Component et JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Novembre 2010
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 221
    Par défaut Component et JTable
    slt je souhaite mettre dans une cellule d'un tableau un checkbox pouvant engendre un action
    lorsque l'on clique dessus de meme pour un boutton que je vouvrais aussi mettre dans l'autre
    cellule et ces action devrais etre percus dans une autre classe afin de les interpretes et effectuer les taches correspondante.

    voici 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
    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
    121
    122
    public class Classtest extends javax.swing.JFrame {
      private Controle com=null;
      public JCheckBox check=null;
       public JCheckBox choix=new JCheckBox() ;
      public  JButton messag=null;
        /** Creates new form Classtest */
        public Classtest() {
            com=new Controle(this);
            forme();
     
        }
         public void forme(){
    //          check.addActionListener(com);
    //          messag.addActionListener(com);
     
             table.setModel(new tablmodel());
             table.setDefaultRenderer(Object.class,new tablerenderer());
             table.setDefaultEditor(String.class,new tabeditor(choix));
         }
      //mon modele
    	   public class tablmodel extends AbstractTableModel {
               int col=2;
            String[] tab = {"toto","titi"};
            String[] tan = {"pat","pepe"};
     
            public int getRowCount() {
                return col;
            }
     
            public int getColumnCount() {
                return col;
            }
     
            public Object getValueAt(int rowIndex, int columnIndex) {
                     Object val=null;
              if(rowIndex==0 && columnIndex==0) {
                  val=tab[rowIndex];
              }
               if(rowIndex==1 && columnIndex==0) {
                  val=tab[rowIndex];
              }
                if(rowIndex==0 && columnIndex==1) {
                  val=tan[rowIndex];
              }
                      if(rowIndex==1 && columnIndex==0) {
                  val=tan[rowIndex];
              }
                     return val;
            }
        }
     
    	//mon TableCellRenderer:
    	   public class  tablerenderer implements TableCellRenderer{
     
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                if(column==0){
                        value=table.getValueAt(row, column);
                         check=new JCheckBox((String)value);
                         if(isSelected){
                           check.addActionListener(com);
                            System.out.println("action saisis");
                         }
     
                       return check;
                    }
                if(column==1){
                         value=table.getValueAt(row, column);
                        messag=new JButton((String)value);
                          if(isSelected){
                           messag.addActionListener(com);
                           System.out.println("action saisis buton");
                         }
                       return messag;
                }
                  return new JTextField();
            }
     
        }
     
    	//mon DefaultCellEditor:
    	   public class tabeditor extends DefaultCellEditor{     
           public tabeditor(JCheckBox c){
               super(c);
               check=c;
           }
     
     
               @Override
                public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
                    //return super.getTableCellEditorComponent(table, value, isSelected, row, column);
                  if(column==0){
                      return check;
                  }
                     if(column==1){
                       return messag;
                }
                  else
                      return new JTextField();
                }
       }  
    }
     
      //ma classe de controle d'execution d'action correspondante:
     
      public class Controle  implements ActionListener{
       private Classtest Test=null;
     
        public Controle(Classtest test){
            Test=test;
        }
     
     
        public void actionPerformed(ActionEvent e) {
            Object obj=e.getSource();
              if(obj.equals(Test.check)){
                     //action à realiser
                   }
              if(obj.equals(Test.messag)){
                   action à realiser
                   }
                }
        }
    bien que les composants soient dans les cellules definis je n'arrive pas à leurs associes un action
    et les faires excecutes car maniere de faire ne marche pas.
    que faire,tu aide serais la bien venu et merçi d'avance.

  2. #2
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    faites en sorte que votre classe implémente ActionListener:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class Classtest extends JFrame implements ActionListener
    {
      /.../
    }
    Ensuite, lorsque vous construisez votre classe, ajoutez à la fin l'instruction qui permette de diriger un évènement vers un composant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    JCheckBox choix = new JCheckBox();
    /.../
    choix.addActionListener( this );
    Enfin, implémentez une classe qui traite l'évènement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Override
    public void actionPerformed( ActionEvent aE )
    {
      if ( aE.getSource() == choix )
      {
        // Traitement d'un évènement sur le composant 'choix'	
        /.../
      }
    }
    En espérant que le code présenté fonctionne...

  3. #3
    Membre très actif
    Inscrit en
    Novembre 2010
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 221
    Par défaut Component et JTable
    slt et avant toi merçi rtg57 mais j'ai beau suivre votre conseil et faire ma classe
    implemente un actionlistner puis associe l'action à mon componnent et afin ecoute mais rien,je n'arrive toujour pas à execute ces actions
    code:
    //mon constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        public Classtest() {
            forme();
     
        }
         public void forme(){
     
             table.setModel(new tablmodel());
             table.setDefaultRenderer(Object.class,new tablerenderer());
             table.setDefaultEditor(String.class,new tabeditor(choix));
         }
    //mon modele
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        public class tablmodel extends AbstractTableModel {
            //iden que le precedent 
        }
    //mon renderer
    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
     public class  tablerenderer implements TableCellRenderer{
          public JCheckBox check=null;
          public  JButton messag=null;
            public Component getTableCellRendererComponent(JTable table, Object    value, boolean isSelected, boolean hasFocus, int row, int column) {
                if(column==0){
                        value=table.getValueAt(row, column);
                        check=new JCheckBox((String)value);               
                       return check;
                    }
                if(column==1){
                         value=table.getValueAt(row, column);
                         messag=new JButton((String)value);
                       return messag;
                }
                  return new JTextField();
            }
     
            public void actionPerformed(ActionEvent e) {
     
            }
     
        }
    //mon editor
    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
     public class tabeditor extends DefaultCellEditor implements ActionListener {
            public JCheckBox check=null;
          public  JButton messag=null;
           public tabeditor(JCheckBox c){
               super(c);
               check=c;
           }
     
               @Override
                public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
                    //return super.getTableCellEditorComponent(table, value, isSelected, row, column);
                  if(column==0){
                       check.addActionListener(this);
                      return check;
                  }
                     if(column==1){
                       messag.addActionListener(this);
                       return messag;
                }
                  else
                      return new JTextField();
     
                }
     
            public void actionPerformed(ActionEvent e) {
                   if(e.getSource()==check){
                     System.out.println("bien venu");
                     JTabbedPane ajout =new  JTabbedPane();
                     JPanel voir = new JPanel();
                     ajout.add(voir);
                     table.add("nouvelle page", voir);
                     System.out.println("action saisis hyu");
                   }
               if(e.getSource()==messag){
                   System.out.println("bien venu 2");
                     JTabbedPane ajout =new  JTabbedPane();
                     JPanel voir = new JPanel();
                     ajout.add(voir);
                    table.add("nouvelle page", voir);
                   }
            }
     
       }
    comme vous pouvez le voir j'ai pense qu'il serrais mieu que ce soit l'editor qui inplememte l'actionlistner mais cependant l'action ne ce realise pas quand l'on clique sur les componnent toutefois le code est correcte.
    alors que faire?
    a++

  4. #4
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    1. tabeditor.messag n'est jamais initialisé (toujours null)
    2. Evites de renvoyer un nouveau composant chaque fois que l'éditeur est appelé.
    3. L'attribut tabeditor.check est inutile, utilise l'attribut editorComponent.
    4. La variable "table" dans tabeditor.actionPerformed n'est pas définie. Si c'est une JTable, la méthode "add" ne marche pas.
    5. La méthode tabeditor.actionPerformed ne tient pas compte d'aucun élément "relatif" comme la table, la valeur, la colonne ou la ligne.
    6. Corriges également le renderer avec ces remarques


    Pour information voici un sujet similaire : http://www.developpez.net/forums/d10...e/#post6014559
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  5. #5
    Membre très actif
    Inscrit en
    Novembre 2010
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 221
    Par défaut Component et JTable
    slt et merci encore pour vos conseils ils m'ont été d'une très grande aide pour une meilleur compréhension
    voilà j'aimerais à présent savoir pourquoi mon programme me levé un NullPointerException .
    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
    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
       public static void main(String args[]) {
     
              final  JButton messag =new JButton();
              messag.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                  //action à exécuter
                }
            });
             final JCheckBox check =new JCheckBox();
            check.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                 //action à exécuter
     
                }
            });
            table.setModel(new Classtest().new tablmodel());
            table.getColumnModel().getColumn(0).setCellRenderer(new TableCellRenderer() {
                public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                    check.setText(String.valueOf(value));
                    return check;
                }
            });
               table.getColumnModel().getColumn(0).setCellEditor(new DefaultCellEditor(check){
     
                @Override
                public Object getCellEditorValue() {
                    return check.getText();
                }
     
                @Override
                public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
                    check.setText(String.valueOf(value));
                    return check;
                }
     
            });
             table.getColumnModel().getColumn(1).setCellRenderer(new TableCellRenderer() {
     
                public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                    messag.setText(String.valueOf(value));
                    return messag;
                }
            });
            table.getColumnModel().getColumn(1).setCellEditor(new TableCellEditor() {
     
                public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
                    messag.setText(String.valueOf(value));
                    return messag;
                }
     
                public Object getCellEditorValue() {
                    return messag.getText();
                }
     
                public boolean isCellEditable(EventObject anEvent) {
                   return true;
                }
     
                public boolean shouldSelectCell(EventObject anEvent) {
                   return true;
                }
     
                public boolean stopCellEditing() {
                    return true;
                }
     
                public void cancelCellEditing() {
                }
     
                public void addCellEditorListener(CellEditorListener l) {
                }
     
                public void removeCellEditorListener(CellEditorListener l) {
                }
            });
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    //lancement du JFrame
                }
            });
     
        }
    	  //mon modèle étant idem que précédent.
    ligne de levant l'Exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        table.setModel(new Classtest().new tablmodel());
    une idée ou conseil sera la bien venu?
    a++

  6. #6
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Citation Envoyé par narutoe Voir le message
    slt et merci encore pour vos conseils ils m'ont été d'une très grande aide pour une meilleur compréhension
    voilà j'aimerais à présent savoir pourquoi mon programme me levé un NullPointerException .
    Euh je tente : parce que table est null, non ? En tout cas, dans le code fournit, je n'ai pas vu où tu l'initialisais.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.setModel(new Classtest().new tablmodel());
    Après je ne suis pas fan des new Class() pointées dans les paramètres de méthodes mais je ne saurais te donner de raisons sérieuses autres que la lisibilité de tout ça.

    PS : Je ne savais même pas que l'on pouvait faire un new Truc().new Chose() déjà.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

Discussions similaires

  1. [Crystal report] Component
    Par Antichoc dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 24/04/2003, 16h11
  2. [SWING]jTable + Focus
    Par chady dans le forum Composants
    Réponses: 5
    Dernier message: 27/02/2003, 14h51
  3. Component not found
    Par Pm dans le forum XMLRAD
    Réponses: 2
    Dernier message: 28/01/2003, 14h40
  4. JBuilder7 & JTable Colonne alignement
    Par Tonton Luc dans le forum JBuilder
    Réponses: 5
    Dernier message: 06/11/2002, 17h32
  5. Réponses: 9
    Dernier message: 12/08/2002, 07h38

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