JTable modifiable

cs_manou9 Messages postés 52 Date d'inscription mardi 9 mars 2010 Statut Membre Dernière intervention 30 mars 2011 - 12 mars 2010 à 16:19
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 - 9 avril 2010 à 20:02
Bonjout
J'ai cree une JTable modifiable mais lorsque je modifie les champs une serie d'erreurs s'affiche sur java concernant IndexOutOfBoundsException Index :0 size : 0.
j'ai utilise la methode setValueAt mais ya un probleme dans cette methode ya-t-il une solution?
Aidez-Moi SVP

15 réponses

uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
12 mars 2010 à 22:03
Veux-tu préciser ton problème?
0
cs_manou9 Messages postés 52 Date d'inscription mardi 9 mars 2010 Statut Membre Dernière intervention 30 mars 2011
13 mars 2010 à 21:33
bonjour
Je vais detailler mon probleme
j'ai cree une petite interface graphique avec java et je veux creer dans cette interface une JTable editable qui est attaché à une base de données mysql, j'ai pu faire cela à partir d'un code trouvé dans les forums mais lorsque je saisie une nouvelle valeur dans la zone ya plein d'erreurs qui s'affichent concernant IndexOutOfBoundsException Index :0 size : 0 et je n'ai pas trouvé une solution à ce probleme!
ou bien ya t il une methode adaptable à mon probleme
Aidez moi SVP c'est une partie de mon projet de fin d'étude si je ne trouve pas la solution je reste coincé
Merci beaucoup
0
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
14 mars 2010 à 11:35
Essaie une fois ceci dans le TableModel:
@Override
public void setValueAt(final Object aValue, final int row, final int column) {
    Vector rowVector = (Vector) dataVector.elementAt(row);
    rowVector.setElementAt(aValue, column);
    fireTableCellUpdated(row, column);
}
0
cs_manou9 Messages postés 52 Date d'inscription mardi 9 mars 2010 Statut Membre Dernière intervention 30 mars 2011
14 mars 2010 à 20:05
est ce que je dois utiliser ce code tel qu'il est ou je dois modifier
et comment faire pour modifier aussi les valeurs correspondantes dans la base de donnees?
0

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

Posez votre question
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
14 mars 2010 à 20:47
> est ce que je dois utiliser ce code tel qu'il est ou je dois modifier

Ca dépend de ton TableModel.

> et comment faire pour modifier aussi les valeurs correspondantes dans la base de donnees?

Tu lance une requête sql "update".
0
cs_manou9 Messages postés 52 Date d'inscription mardi 9 mars 2010 Statut Membre Dernière intervention 30 mars 2011
15 mars 2010 à 17:29
Bonjour
Voici le code java pour l'affichage d'une table de ma base de donnees et la rendre editable sauf que je n'ai pas encore mis l'instructuion de Update :
========================================
1 eme java class
========================================

//////TMFromMysql.java
package desktopapplication2;
import java.sql.*;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.Vector;

class TMFromMysql extends AbstractTableModel {




public static SQLExecuteQuery connexion;

public TMFromMysql(String pilote,String host,String login,String pw,String query){
connexion = new SQLExecuteQuery(pilote,host,login,pw);
connexion.setQuery(query);

}
@Override
public boolean isCellEditable (int rowIndex, int columnIndex){
return true;
}
public int getColumnCount(){
int i = 0;
try {
i = connexion.getResultSet().getMetaData().getColumnCount();
}
catch(SQLException e){
System.out.println(e);
}
return i;
}

public int getRowCount(){
int i = 0;
try {
ResultSet rs = connexion.getResultSet();
rs.last();
i = rs.getRow();
}
catch(SQLException e){
System.out.println(e);
}
return i;
}

public String getColumnName(int c){
String s = "";
try {
s = connexion.getResultSet().getMetaData().getColumnName(c + 1);
}
catch(SQLException e){
System.out.println(e);
}
return s;
}

public Object getValueAt(int row,int column){
Object o = "";
try {
ResultSet rs = connexion.getResultSet();
rs.absolute(row + 1);
o = rs.getObject(column + 1);
}
catch(SQLException e){
System.out.println(e);
}
return o;
}

@Override // Je suis sur que l'erreur est ici
public void setValueAt(final Object colname, final int row, final int columnIndex)
{
Vector vect = new Vector();
Vector rowVector = (Vector) vect.elementAt(row);
switch (columnIndex){
case 1: vect.setElementAt(colname,columnIndex);
break;
case 2 : vect.setElementAt(colname,columnIndex);
break;
case 3 : vect.setElementAt(colname,columnIndex);
break;
case 4 : vect.setElementAt(colname,columnIndex);
break;
case 5 : vect.setElementAt(colname,columnIndex);
break;
case 6: vect.setElementAt(colname,columnIndex);
break;
}

rowVector.setElementAt(colname, columnIndex);
fireTableCellUpdated(row, columnIndex);
}
private static Object[][] data;
private static Object[] colname;


}
========================================
2 eme java class
========================================

////SQLExecuteQuery.java
package desktopapplication2;
import java.sql.*;
import org.gjt.mm.mysql.Driver;

public class SQLExecuteQuery {

private static Statement stmt;
private static Connection conn;
private static String query,host,login,pw,pilote;
private static Object a_obj[];
private static Object obj;
private static ResultSet rs;
//private Candidat [] ca1;
public SQLExecuteQuery(String pilote,String host,String login,String pw){
this.pilote = pilote;
this.host = host;
this.login = login;
this.pw = pw;
this.query = query;
Connect();
}

private static void Connect(){
try
{
Class.forName(pilote).newInstance();
conn = DriverManager.getConnection(host,login,pw);
stmt = conn.createStatement();
}
catch ( SQLException E)
{
System.out.println("SQLException: " + E.getMessage());
System.out.println("SQLState: " + E.getSQLState());
System.out.println("VendorError: " + E.getErrorCode());
}
catch ( ClassNotFoundException E)
{
E.printStackTrace();
}
catch ( InstantiationException E)
{
System.out.println(E);
}
catch ( IllegalAccessException E)
{
System.out.println(E);
}
catch ( NullPointerException E)
{
System.out.println(E);
}
}

public static void setQuery(String query){
try {
rs = stmt.executeQuery(query);
}
catch (SQLException E){
System.out.println("SQLException: " + E.getMessage());
System.out.println("SQLState: " + E.getSQLState());
System.out.println("VendorError: " + E.getErrorCode());
}
}

public static ResultSet getResultSet(){
return rs;
}

}
========================================
3 eme java class
========================================
////f.java
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package desktopapplication2;

import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.print.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.Dimension;
import java.sql.*;
/**
*
* @author abderrahmane
*/
public class f extends JFrame {
//@Override
//public Dimension getPreferredSize() {
//return new Dimension(20, 30);}
public f(){
String pilote = "com.mysql.jdbc.Driver";
String host = "jdbc:mysql://localhost:3306/my db";
String login = "root";
String pw = "";
setTitle("Liste des candidats");
setSize(x,y);
//setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
show();
TM = new TMFromMysql(pilote,host,login,pw,"select * from candidat");
JTable T = new JTable(TM);
JScrollPane JSP = new JScrollPane(T);
JSP.setPreferredSize(new Dimension(x,y));
getContentPane().add(JSP,BorderLayout.CENTER);
pack();
//TM.setValueAt(T.getSelectedRow(),0 ,1 );
// boutton d'impression

JButton printButton = new JButton();
printButton.setText("Imprimer");
this.add(BorderLayout.SOUTH, printButton);
printButton.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
ImpressionTable I = null ;
PrinterJob pj = PrinterJob.getPrinterJob();
//pj.setPrintable(ImpressionTable);
pj.setPrintable(I);
pj.printDialog();
try
{
pj.print();
}
catch (Exception PrintException)
{
}
}
}
);


}

public static TableModel TM;
private static final int x = 900;
private static final int y = 900;

}
====================================
a l'execution il m'affiche une erreur concernant
ArrayIndexOutOfBoundsException 1>=0

Je precise que mon but est d'afficher ma base de donnees en la rendant editable(Affichage OK mais editable non)
ya-y-il une solution?
0
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
17 mars 2010 à 06:27
L'utilisation d'un "Vector" n'est pas indiquée dans ton cas, puisque tu te base directement sur le "ResetSet". Essaie d'actualiser le ResultSet avec une méthode "rs.update..." et la base avec "rs.updateRow()". Tu dois peut-être adapter également le "createStatement(..)" de la méthode "Connect()".
0
cs_manou9 Messages postés 52 Date d'inscription mardi 9 mars 2010 Statut Membre Dernière intervention 30 mars 2011
17 mars 2010 à 13:13
J'ai ecris un code en suivant tes conseils 'uhrand' mais rien est passe, la base n'est pas modifiable et lorsque j'entre une nouvelle valeur dans la Jtable c'est l'ancienne qui reste
voici le code ;
try {
// Création d'une connexion à la base
Connection ma_connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/my db",
"root",
""
);
Statement stmt = ma_connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT * FROM candidat");

while (rs.next()){
String N = rs.getString(2);
rs.updateString("Nom", N);
//rs.updateRow();
String P = rs.getString(3);
rs.updateString("Prenom", P);
String D = rs.getString(4);
rs.updateString("DN", P);
int C = rs.getInt(5);
rs.updateInt("CD", C);
String Pr = rs.getString(6);
rs.updateString("Presence", Pr);
int w = rs.getInt(7);
rs.updateInt("wilaya", w);

rs.updateRow();


}
ma_connection.close();
}
catch (java.sql.SQLException e) {
System.err.println(e);
System.exit(-1);
}
0
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
17 mars 2010 à 15:12
Ton code fait des mises à jour avec les anciennes valeurs: c'est normal que la base ne change pas.
0
cs_manou9 Messages postés 52 Date d'inscription mardi 9 mars 2010 Statut Membre Dernière intervention 30 mars 2011
17 mars 2010 à 15:33
et comment faire la mise a jour avec les nouvelles valeurs?
0
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
17 mars 2010 à 17:43
> et comment faire la mise a jour avec les nouvelles valeurs?

Tu fais les "rs.update..." avec les nouvelles valeurs.
0
cs_manou9 Messages postés 52 Date d'inscription mardi 9 mars 2010 Statut Membre Dernière intervention 30 mars 2011
8 avril 2010 à 22:47
j'ai essaye mais je n'ai pas reussi
0
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
9 avril 2010 à 08:10
S'il te plais, est-ce que tu pourrais éventuellement nous montrer le code que tu as essayé, si ça ne te dérange pas trop?
0
cs_manou9 Messages postés 52 Date d'inscription mardi 9 mars 2010 Statut Membre Dernière intervention 30 mars 2011
9 avril 2010 à 12:11
mais je l'ai deja envoye dans ce sujet page 1
0
uhrand Messages postés 491 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 15 juillet 2012 9
9 avril 2010 à 20:02
et c'est quoi que tu as essayé en plus, suite à ma réplique?
0