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