Bonjour Tous,
j'affiche les données d'une base dans un jtable editable.
l'utilisateur doit modifier une ou plusieurs cellules de lignes et ces modifications doivent être appliqué dans le jtable et dans la base après une action sur 1 bouton de commande ou à la fermeture du frame.
Le model
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 public class Etudiant { private int id_etudiant; private String sexe; private String nom; private String prenom; private String Ville; private String pays; private String datenai; public Etudiant(){ } public Etudiant(int id_etudiant,String sexe,String nom,String prenom,String ville,String pays,String datenai){ this.id_etudiant=id_etudiant; this.sexe=sexe; this.nom=nom; this.prenom=prenom; this.Ville=ville; this.pays=pays; this.datenai=datenai; } public String getPrenom() { return prenom; } public void setPrenom(String prenom) { this.prenom = prenom; } public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; } public int getId_etudiant() { return id_etudiant; } public void setId_etudiant(int id_etudiant) { this.id_etudiant = id_etudiant; } public String getSexe() { return sexe; } public void setSexe(String sexe) { this.sexe = sexe; } public String getVille() { return Ville; } public void setVille(String ville) { this.Ville = ville; } public String getPays() { return pays; } public void setPays(String pays) { this.pays = pays; } public String getdatenai() { return datenai; } public void setdatenai(String datenai) { this.datenai = datenai; } }
la fenetre
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 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import javax.swing.table.AbstractTableModel; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class LeModel extends AbstractTableModel{ private ArrayList<Etudiant> Liste =new ArrayList<Etudiant>(); private final String []entetes={"Id","Sexe","Nom","Prenom","Ville","Pays","Date"}; String user="root"; String mdp="monpass"; String url ="jdbc:mysql://localhost:3306/mabase"; Connection conn; ResultSet result; Statement state; public LeModel(){ super(); try { Class.forName("com.mysql.jdbc.Driver"); conn =DriverManager.getConnection(url,user,mdp); state=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); result=state.executeQuery("select id_etudiant,sexe_etudiant,nom_etudiant,prenom_etudiant,ville_etudiant,pays_etudiant,datenais_etu from etudiant limit 15"); while(result.next()){ Liste.add(new Etudiant(result.getInt(1),result.getString(2),result.getString(3), result.getString(4),result.getString(5),result.getString(6),result.getString(7))); } } catch (Exception e) { e.printStackTrace(); } } @Override public int getColumnCount() { return entetes.length; } @Override public int getRowCount() { return Liste.size(); } @Override public Object getValueAt(int rowindex, int ColumnIndex) { switch (ColumnIndex) { case 0: return Liste.get(rowindex).getId_etudiant(); case 1: return Liste.get(rowindex).getSexe(); case 2: return Liste.get(rowindex).getNom(); case 3: return Liste.get(rowindex).getPrenom(); case 4: return Liste.get(rowindex).getVille(); case 5: return Liste.get(rowindex).getPays(); case 6: return Liste.get(rowindex).getdatenai(); default: return null; } } public String getColumnName(int ColumnIndex) { return entetes[ColumnIndex]; } @Override public boolean isCellEditable(int row, int col) { return true; } public void addRow() { Liste.add(new Etudiant()); fireTableRowsInserted(Liste.size()-1, Liste.size()-1); } @Override public void setValueAt(Object value, int rowIndex, int columnIndex){ if(value!=null){ Etudiant e=Liste.get(rowIndex); switch(columnIndex){ case 0: try{ e.setId_etudiant(Integer.parseInt((String)value)); break; } catch(NumberFormatException i){ e.setId_etudiant(0); break; } case 1: e.setSexe((String)value); break; case 2: e.setNom((String)value); break; case 3: e.setPrenom((String)value); break; case 4: e.setVille((String)value); break; case 5: e.setPays((String)value); break; case 6: e.setdatenai((String)value); break; } } } }
je veux en fait simuler une tache d'excel.
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 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.TableColumn; public class MainFrame extends JFrame{ private JPanel leConteneur=new JPanel(); private JPanel Haut=new JPanel(); private JPanel bas=new JPanel(); private JPanel centre=new JPanel(); private JButton btnAjout=new JButton("Ajout ligne"); private JButton btnAct=new JButton("Actualiser"); private JTable LeTableau; private LeModel donees; public MainFrame(){ this.setTitle("Ma Requête dans Une Jtable"); this.setSize(800, 500); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLayout(new BorderLayout()); donees =new LeModel(); LeTableau=new JTable(donees); Haut.setBackground(Color.GRAY); bas.setBackground(Color.GRAY); bas.add(btnAjout); bas.add(btnAct); centre.add(new JScrollPane(LeTableau)); this.setLocationRelativeTo(null); this.getContentPane().add(Haut,BorderLayout.NORTH); this.getContentPane().add(centre,BorderLayout.CENTER); this.getContentPane().add(bas,BorderLayout.SOUTH); //Modif Taille colonne // LeTableau.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // TableColumn col=LeTableau.getColumnModel().getColumn(0); // col.setPreferredWidth(50); btnAjout.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { donees.addRow(); } }); btnAct.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { }); } }
je pense qu'il va me falloir identifier toutes les lignes contenant au moins une cellule qui a été modifié (chose que j'ai du mal à faire).
recuperer Toutes les données de cette ligne(dans une collection ou autres) afin de pouvoir faire un update dans la base sur le critère de l'id (colonne 0)
J'espère avoir mieux expliquer ma preoccupation
Merci pour Votre Aide
Partager