les cellues de JTable en swing

les cellues de JTable en swing - Java - Programmation

Marsh Posté le 08-05-2007 à 21:29:13    

Salut, :hello:  
 
je veux developper une interface avec swing qui contient un tableau qui recupere des informations  apres un click sur un bouton. j'ai essaye l'exemple qui se trouve dans les faqs java mais j'ai remarque que lorsque je clique sur un cellule donne elle est modifiable cad je peux changer son contenu ???
comment faire pour rendre tous les cellules de jtable non editables "lecture seul"
 
 
Merci pour vos aides :)

Reply

Marsh Posté le 08-05-2007 à 21:29:13   

Reply

Marsh Posté le 08-05-2007 à 22:37:50    

faut overrider la methode isCellEditable de ton TableModel (de mémoire).

Reply

Marsh Posté le 09-05-2007 à 10:11:40    

Bonjour
c.a.d comment redefinir la methode is cellEditable ?? est e que vous pouvez etre mieux explicite par un simple exemple merci  
je serai reconnaissant  
Merci pour vos aides

Reply

Marsh Posté le 10-05-2007 à 15:09:58    

tu dois te faire une classe model ou tu redefinis la fonction isCellEditable

 
Code :
  1. public class TableModel extends AbstractTableModel{
  2. ....
  3. public boolean isCellEditable(int row, int col) {
  4.          return false; // toutes les cellules seront non editables
  5.         }
  6. }
  7. ....
  8. }
 

edit: ton titre il y a une faute de frappe


Message édité par tching pao le 10-05-2007 à 15:11:13
Reply

Marsh Posté le 10-05-2007 à 16:00:16    

Merci pour votre aide  
un petit probleme qui me reste et me gene un peu c'est comment je vais supprimer une ligne selectionne dans le tableau
 
est ce que je dois appeler des methodes predefini pour la suppression
Merci et bonne journe

Reply

Marsh Posté le 10-05-2007 à 16:29:41    

pour supprimer un ligne
- ca vient d'un evenement donc dans la fonction qui gere cette evenement tu appels un fonction qui supprimera la ligne de ta structure et tu rafraichis le tableau et voila
 
inspire toi des exemples fourni par la doc
http://java.sun.com/docs/books/tut [...] table.html

Reply

Marsh Posté le 10-05-2007 à 19:52:50    

j'ai compris comment gerer l'evenement,(lorsque il clique sur la ligne) et j'ai deja vue doc de java Mon probleme  reside j'ai pas trouve dans cette doc l'instruction qui supprimera la ligne laquelle SVP
Merci

Reply

Marsh Posté le 10-05-2007 à 21:08:19    

y a pas de fonction toute faite
si ta strucutre de donnee dans ton modele est un vector alors tu utiliseras remove(int i) puis fireTableData pour rafraichir le tableau, tout ceci dans une fonction que tu appeleras une fois l'evenement capté

 

J'avoue que les tableaux en java c'est pas ce qu'il y a de plus facile a aborder.


Message édité par tching pao le 10-05-2007 à 21:53:44
Reply

Marsh Posté le 10-05-2007 à 22:33:12    

je vous envoie mon code qui n'est pa marche meme avec votre derniere aide
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Vector;
 
import javax.swing.*;
 
public class Frame implements ActionListener {
 
private JFrame f;
private JPanel p;
private JButton A;
private JTable table;
private JScrollPane scrollpane;
         Vector<personne> VP;
private Object[][] mesResultats;
private String [] columns = {"Nom", "Prenom", "Age"};
 
private Model_Personne M;
 
public Frame ()
{
 f=new JFrame();
 p=new JPanel();
 A=new JButton("Supprimer" );
 A.addActionListener(this);
 
 //
 personne P1= new personne("Fabbien","Pierre",23);
 personne P2= new personne("XXX","AAAe",23);
 personne P3= new personne("AAAA","EEEE",23);
 VP=new Vector();
 VP.add(P1);
 VP.add(P2);
 VP.add(P3);  
 
 personne tmp;
 mesResultats = new Object[VP.size()][columns.length];
 for (int i = 0 ; i < VP.size() ; i++) {
  tmp = VP.get(i);
  mesResultats[i][0] = tmp.getnom();
  mesResultats[i][1] = tmp.getprenom();
  mesResultats[i][2] = tmp.getage();
 }
 M=new Model_Personne(mesResultats,columns);
 table = new JTable(M);
 table.setPreferredScrollableViewportSize(new Dimension(200, 200));
 scrollpane= new JScrollPane(table);
 p.add(scrollpane);
 p.add(A);
 f.getContentPane().add(p);
 f.setVisible(true);
}
 
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Frame instanc=new Frame();
 }
 public void actionPerformed(ActionEvent arg0) {
  // TODO Auto-generated method stub
  if (arg0.getSource()==A)
  {  
    int ligne_selec=table.getSelectedRow();
    System.out.print("Numero ligne selectionee est "+ligne_selec);
    int res=JOptionPane.showConfirmDialog(null,
 
               "Voulez vous vraiment suuprimer cette règle", "Supprimer Règle", JOptionPane.YES_NO_OPTION);
    if(res==JOptionPane.YES_OPTION)
    {
    if(ligne_selec!=-1)
    {
     M.delete_Row(ligne_selec);
     
    }  
    }
  }
 }
}
 
 
***
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
 
public class Model_Personne extends AbstractTableModel {
   
     private Object[][] donnees;
  private final String[] titres;
   
  public Model_Personne(Object donnees[][], String titres[]) {
   this.donnees = donnees;
   this.titres = titres;
  }
   
  public int getColumnCount() {
   return donnees[0].length;
  }
   
  public Object getValueAt(int parm1, int parm2) {
   return donnees[parm1][parm2];
  }
   
  public int getRowCount() {
   return donnees.length;
  }
   
  public String getColumnName(int col){
   return titres[col];
  }
   
  public boolean isCellEditable(int row, int col) {
   return false;
  }
  //
  public void delete_Row(int x)
  {
   
    //VP.remove(x);
   
   //donnee seront supprime de modeel ou de arraylist
   fireTableDataChanged();  
  }
}
 
Merci pour votre aide  lorsque je tape VP. y pas remove peut etre q j'ai pb ds mon code

Reply

Marsh Posté le 10-05-2007 à 22:49:31    

j'ai regardé vite fait mais c'est pas sur VP qu'il faut faire le remove
mais quand je parlais de strucure de donnees dans ton model c'est dans  ton tableau Object[][] qu'il faut enlever la ligne
 
 donc enlever chaque cellules  correspondant a ta ligne dans la structure Object[][]

Reply

Marsh Posté le 10-05-2007 à 22:49:31   

Reply

Marsh Posté le 11-05-2007 à 10:30:53    

oui je compris ca mais est ce que je dois faire de decalage???

Reply

Marsh Posté le 11-05-2007 à 11:21:17    

la structure que tu as choisi (object[][]) est pas terrible quand on souhaite   enlever ou rajouter des lignes prends plutot un vector car au moins ta pas besoin de decaler les elements toi meme

Reply

Marsh Posté le 12-05-2007 à 21:18:22    

desole mais ya til pas une autre methode sans que je passe par decalage
ou je dois changer dans mon code
Merci

Reply

Marsh Posté le 13-05-2007 à 12:22:32    

soit tu gardes ta structure actuelle object[][] et tu dois t'occuper du decalage
soit tu prends vector comme nouvelle structure
avec vector trois possiblités:
 
- 1) un seul vector pour tout ton tableau mais dans ce cas il faudra realiser un ptit calcul pour la conversion des coordonnees row col (deux dimensions) en une dimension
 
- 2) un vector comprenant autant de vector qu'il y a de colonne
 
- 3) un vector par colonne mais oblige a mettre des conditions dans les fonction    if(col==0) vector0... if(col==1) vector1...
 
voila
bon courage

Reply

Marsh Posté le 14-05-2007 à 20:10:00    

Merci beaucoup pour votre aide j'ai bien resolu ce probleme

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed