les cellues de JTable en swing - Java - Programmation
Marsh Posté le 08-05-2007 à 22:37:50
faut overrider la methode isCellEditable de ton TableModel (de mémoire).
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
Marsh Posté le 10-05-2007 à 15:09:58
tu dois te faire une classe model ou tu redefinis la fonction isCellEditable
| Code : 
 | 
edit: ton titre il y a une faute de frappe
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
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
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
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.
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
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[][]
Marsh Posté le 11-05-2007 à 10:30:53
oui je compris ca mais est ce que je dois faire de decalage???
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
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
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
Marsh Posté le 14-05-2007 à 20:10:00
Merci beaucoup pour votre aide j'ai bien resolu ce probleme
Marsh Posté le 08-05-2007 à 21:29:13
Salut, 
  
 
 
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