Probleme de selection d'une cellule d'un JTable

cs_Meriem85 Messages postés 43 Date d'inscription dimanche 13 avril 2008 Statut Membre Dernière intervention 30 juin 2010 - 18 avril 2008 à 20:19
aminewas Messages postés 13 Date d'inscription mercredi 10 octobre 2007 Statut Membre Dernière intervention 31 mars 2010 - 30 mars 2010 à 00:43
Bonsoir,
Dans  mon code j'essais d'ouvrir un JFrame en cliquant sur une cellule d'un JTable mais le proleme est quand je clique sur une cellule tte la ligne sera selectionnée et tous les frame correspondant à ttes les cellules de ctte ligne s'ouvrent ensemble.
Ds mon code j'utilise la methode :

public Component getTableCellRendererComponent(JTable table, Object value,
             boolean isSelected,boolean hasFocus, int row, int column)
{
if(isSelected){ // si cellule est sellectionnée le frame correspondant s'ouvre
.....;
...;
interfCell.setVisible(true);
}
}
SVP aidez moi,j'ai meme cherchéds les tutoriols maois j'ai rien trouvé
Bonne nuit et merci d'avance

13 réponses

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
18 avril 2008 à 20:49
Salut:

D'abord, la méthode getTableCellRendererComponent() retourne l'éditeur par défaut de ta table. En d'autres termes, cette méthode n'est pas la méthode où tu devras gérer les événements.

Tu peux procéder ainsi:

private JTable table = ...;

table.getSelectionModel().addListSelectionListener(
    new ListSelectionListener() {
       public void valueChanged(ListSelectionEvent evt) {
          // Coordonnées de la cellule séléctionnée
          int selectedRow = table.getSelectedRow();
          int selectedColumn = table.getSelectedColumn();

          // ...

       }
    }
);
0
cs_Meriem85 Messages postés 43 Date d'inscription dimanche 13 avril 2008 Statut Membre Dernière intervention 30 juin 2010
18 avril 2008 à 21:00
En realitée je suis debutante en java et j'ai jamais utilisé cette methode:table.getSelectionModel().addListSelectionListener
Je veux savoir comment je peux par la suite afficher le frame
interfCell
c.à.d où est ce que je dois mettre: interfCell.setVisible(true);
Merci d'avance
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
18 avril 2008 à 22:01
Salut:

Suppons que tu as créé une interface utilisateur (disons une boite de dialogue).

public class MyDialog extends JDialog {
    // Code ...
}

private JTable table = ...;

private JDialog dialog = null;

table.getSelectionModel().addListSelectionListener(
    new ListSelectionListener() {
       public void valueChanged(ListSelectionEvent evt) {
          // Coordonnées de la cellule séléctionnée
          int selectedRow = table.getSelectedRow();
          int selectedColumn = table.getSelectedColumn();

          // Supposons que lorsqu'on clique sur la cellule (1, 1)
          // On lance la boite de dialogue en question
          if (dialog == null) {
             dialog = new MyDialog();
          }
          dialog.setVisible(true);
       }
    }
);
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
18 avril 2008 à 22:06
Salut:

J'ai oublié de faire un test sur les coordonnées de la cellule avant de lancer la boite de dialogue.

public class MyDialog extends JDialog {
    // Code ...
}

private JTable table = ...;

private JDialog dialog = null;

table.getSelectionModel().addListSelectionListener(
    new ListSelectionListener() {
       public void valueChanged(ListSelectionEvent evt) {
          // Coordonnées de la cellule séléctionnée
          int selectedRow = table.getSelectedRow();
          int selectedColumn = table.getSelectedColumn();

          // Supposons que lorsqu'on clique sur la cellule (1, 1)
          // On lance la boite de dialogue en question          if ((selectedRow 1) && (selectedColumn 1)) {
              if (dialog == null) {
                 dialog = new MyDialog();
              }
              dialog.setVisible(true);
          }
       }
    }
);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Meriem85 Messages postés 43 Date d'inscription dimanche 13 avril 2008 Statut Membre Dernière intervention 30 juin 2010
19 avril 2008 à 01:47
Bonsoir,
J'ai essayé la partie du code que vous m'avez envoyé mais il y a toujours une exeption: method: valueChanged signature: (Ljavax/swing/event/ListSelectionEvent;)V) Register 13 contains wrong type.
SVP aidez moi si vous savez de quoi il s'agit.
Bonne nuit et merci d'avance
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
19 avril 2008 à 06:34
Salut:

import javax.swing.*;
import javax.swing.event.*;

import java.awt.*;

public class Table extends JFrame {
    {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
       
        final JTable table = new JTable(
            new Object[][] {
                {"A", 25},
                {"B", 22}
            },
            new Object[] {"Name", "Age"}
        );
        table.setPreferredSize(new Dimension(400, 400));
        table.setCellSelectionEnabled(true);
        table.getSelectionModel().addListSelectionListener(
            new ListSelectionListener() {
                public void valueChanged(ListSelectionEvent evt) {
                    int selectedRow = table.getSelectedRow();
                    int selectedColumn = table.getSelectedColumn();
                
                    System.out.println("row : " + selectedRow + ", column : " + selectedColumn);
                }
            }
        );
       
       
        getContentPane().add("Center", new JScrollPane(table));
        pack();
    }
   
    public static void main(String[] args) {
        Table t = new Table();
        t.setVisible(true);
    }
}
0
cs_Meriem85 Messages postés 43 Date d'inscription dimanche 13 avril 2008 Statut Membre Dernière intervention 30 juin 2010
19 avril 2008 à 13:00
Bonjour(Salem )


Merci bien pour votre aide Ombitious_Developper j'ai essyé votre methode et elle marche cette fois sans exception mais j'ai un autre probleme:lorsque je clique sur une cellule d'un JTable l'interface que je veux s'ouvre 2 fois je sais pas si une erreure ds mon code ou quoi?
Autre question SVP:vous m'avez dit l'autre fois que la méthode getTableCellRendererComponent() retourne l'éditeur par défaut de ta table. En d'autres termes, cette méthode n'est pas la méthode où tu devras gérer les événements.
franchement j'ai pas bien compri ce commentaire,par exemple est ce que je peux colorer les cellules du JTable sans utiliser la methode getTableCellRendererComponent().
Bonne journée et desolé pour le derangement.
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
19 avril 2008 à 19:47
Salut:

Pour ne pas lancer plus qu'une seule instance de ton interface graphique, tu peux procéder ainsi:

private JTable table = ...;

private InterfCell interfCell = null;

table.getSelectionModel().addListSelectionListener(
    new ListSelectionListener() {
       public void valueChanged(ListSelectionEvent evt) {
          // Coordonnées de la cellule séléctionnée
          int selectedRow = table.getSelectedRow();
          int selectedColumn = table.getSelectedColumn();

          if ((selectedRow 1) && (selectedColumn 1)) {
               
// Pour lancer une seule instance
                if (interfCell == null) {
                     interfCell = new InterfCell();
                }
                interfCell.setVisible(true);

          }

       }
    }
);

La méthode getTableCellRendererComponent() retourne l'éditeur par défaut des cellules de la table. C'est celui qui gère l'affichage des données (couleur, font, ...).

Donc pour colorer les cellules d'un objet JTable tu dois utiliser cette méthode.
0
cs_Meriem85 Messages postés 43 Date d'inscription dimanche 13 avril 2008 Statut Membre Dernière intervention 30 juin 2010
20 avril 2008 à 19:55
St et je suis vraiment désolé pour le derangement mais j'ai essayé la solution que vous m'avez donné mais le probleme cette fois et que lorsque sur la premiere cellule c'est bon(le frame  s'ouvre une seule fois) alors que qd je clique sur n'importe quelle autre cellule c'est toujours le frame qui correspond à la premiere cellule qui s'ouvre(sachant que ds mon code je veux ouvrir le frame "interf" mais ds lequel le contenu change d'une cellule à une autre)
Voici la partie de mon code et SVP si vous avez une solution aidez moi:
    private  InterfCell interf= null;
    private JTable table;
     table.getSelectionModel().addListSelectionListener(
                            new ListSelectionListener() {                           
                               public void valueChanged(ListSelectionEvent evt) {                      
                                     CustomTransCellRenderer cus=new CustomTransCellRenderer(pathcodvm,pathdatatran,pathregles,vInit);
                                    Hashtable h=new Hashtable();                                  
                                   h=cus.getListRegles();
                                  if (interf == null)
                                {
                                      interf = new InterfCell();
                                  // Coordonnées de la cellule séléctionnée
                                  int selectedRow = table.getSelectedRow();
                                  int selectedColumn = table.getSelectedColumn();
                                 
                                  String value=(String)table.getValueAt(selectedRow, selectedColumn);
                                 
                                  for(int i=0;i<vInit.size();i++)
                                    {
                                        Ligne line =(Ligne)vInit.elementAt(i);                                   
                                        if((selectedRow= =(Integer.parseInt(line.getTrans()))-1)&&(value.equals(line.getVm())))
                                                                           
                                            interf.txttrans.setText(line.getTrans());
                                            interf.txtvm.setText((String)table.getValueAt(selectedRow, selectedColumn));
                                             if(line.getType().equals("D")){                                              
                                                vDir.addElement(line.getReg());
                                                cptdir++;                                             
                                            }
                                            else if(line.getType().equals("ID")){                                              
                                                vIndir.addElement(line.getReg());
                                                cptind++;
                                            }
                                            else if(line.getType().equals("H")){                                              
                                                vHyb.addElement(line.getReg());
                                                cpthyb++;                                            
                                            }                                       
                                        }                                      
                                        }
                                  if((cptdir>0)&&(cptind ==0)&&(cpthyb==0))
                                {    
                                     j=0;
                                    for(int i=0;i<vDir.size();i++)
                                    {                                      
                                        JLabel l=new JLabel("Règle: "+( h.get(Integer.parseInt((String)vDir.elementAt(i)))));
                                        interf.presd.add(l);
                                        l.setBounds(20, y+(20*j)+(5*j), 295, 15);
                                        j++;
                                    }           
                                    interf.contentPane.add(interf.panel1);
                                    interf.panel1.setBounds(25, 90, 340, 155);
                                }
                                else if((cptind>0)&&(cptdir==0)&&(cpthyb==0))
                                {                                   
                                    j=0;
                                    for(int i=0;i<vIndir.size();i++){                                      
                                        JLabel l=new JLabel("Règle: "+( h.get(Integer.parseInt((String)vIndir.elementAt(i)))));
                                    interf.presind.add(l);
                                    l.setBounds(20, y+(20*j)+(5*j), 295, 15);
                                    j++;
                                    }
                                    interf.contentPane.add(interf.panel2);
                                    interf.panel2.setBounds(25, 90, 340, 155);
                                }
                                else if((cpthyb>0)&&(cptdir==0)&&(cptind==0))
                                {                           
                                    j=0;
                                    for(int i=0;i<vHyb.size();i++){
                                        JLabel l=new JLabel("Règle: "+( h.get(Integer.parseInt((String)vHyb.elementAt(i)))));
                                        interf.preshyb.add(l);
                                        l.setBounds(20, y+(20*j)+(5*j), 295, 15);
                                        j++;
                                        }
                                    interf.contentPane.add(interf.panel3);
                                    interf.panel3.setBounds(25, 90, 340, 155);
                                }                       
                                }
                                 interf.setVisible(true);                               
                               }                          
                            }
                        );
Bonne nuit et merci d'avance
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
20 avril 2008 à 22:25
Salut:

Ce que je fais c'est juste un exemple. Tu dois adapter le code à tes besoins.

1. Normalement tu dois préparer les interfaces graphiques que tu veux lancer lorsqu'on séléctionne une cellule donnée.

2. Discuter selon la cellule séléctionnée quelle interface il faut lancer.
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
20 avril 2008 à 22:33
Salut:

Qu'est ce que tu affiches au juste quand tu séléctionnes une cellule?
0
cs_Meriem85 Messages postés 43 Date d'inscription dimanche 13 avril 2008 Statut Membre Dernière intervention 30 juin 2010
20 avril 2008 à 23:50
Bonsoir,quand je selectionne une cellule c'est toujours l'interface interf qui s'aafiche(interf.setVisible(true)) mais comme je vous ai dit déja et comme il est indiqué ds mon code c'est toujour le contenu du JFrame inter qui sera modifié selon les conditions par cellule(par exemple pour une cellule je peu avoir 2 JPanel contenent des JLabel different,pour une autre je peux avoir un seul JPanel et comme ci de suite) donc l'intrface que j'affiche est dynamique c.à.dire le contenu change d'une cellule à une autre.
0
aminewas Messages postés 13 Date d'inscription mercredi 10 octobre 2007 Statut Membre Dernière intervention 31 mars 2010
30 mars 2010 à 00:43
bonsoir,
stp est ce que y'a qlq que peu m'aidé

j v afficher dans un jtextfield la lign selectionner de jtable

voila mon code pour afficher ds jtable a partir de la bd

public void initialiser_tableau (){

connection cnx= new connection();
st=cnx.test();
DefaultTableModel model=(DefaultTableModel) jTable1.getModel();
// table.getSelectionModel().addListSelectionListener(event);

model.addColumn("id");
model.addColumn("sujet");
model.addColumn("description");
try{
rs=st.executeQuery("select * from projet;");
while(rs.next())
{
Vector v=new Vector();
v.add(rs.getString(1));
v.add(rs.getString(2));
v.add(rs.getString(3));
model.addRow(v);

//System.out.println("prenom :"+rs.getString(2));
// System.out.println("tel :"+rs.getString(3));
}
//System.out.println("affichage");
}
catch (SQLException ex)
{ System.out.println(ex.getMessage()); }

jTable1.setModel(model);

//System.out.println("erreur");
}
merci d'avance
0
Rejoignez-nous