JTable modifiable

Signaler
Messages postés
52
Date d'inscription
mardi 9 mars 2010
Statut
Membre
Dernière intervention
30 mars 2011
-
Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
-
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

Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
10
Veux-tu préciser ton problème?
Messages postés
52
Date d'inscription
mardi 9 mars 2010
Statut
Membre
Dernière intervention
30 mars 2011

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
Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
10
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);
}
Messages postés
52
Date d'inscription
mardi 9 mars 2010
Statut
Membre
Dernière intervention
30 mars 2011

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?
Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
10
> 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".
Messages postés
52
Date d'inscription
mardi 9 mars 2010
Statut
Membre
Dernière intervention
30 mars 2011

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?
Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
10
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()".
Messages postés
52
Date d'inscription
mardi 9 mars 2010
Statut
Membre
Dernière intervention
30 mars 2011

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);
}
Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
10
Ton code fait des mises à jour avec les anciennes valeurs: c'est normal que la base ne change pas.
Messages postés
52
Date d'inscription
mardi 9 mars 2010
Statut
Membre
Dernière intervention
30 mars 2011

et comment faire la mise a jour avec les nouvelles valeurs?
Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
10
> et comment faire la mise a jour avec les nouvelles valeurs?

Tu fais les "rs.update..." avec les nouvelles valeurs.
Messages postés
52
Date d'inscription
mardi 9 mars 2010
Statut
Membre
Dernière intervention
30 mars 2011

j'ai essaye mais je n'ai pas reussi
Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
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?
Messages postés
52
Date d'inscription
mardi 9 mars 2010
Statut
Membre
Dernière intervention
30 mars 2011

mais je l'ai deja envoye dans ce sujet page 1
Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
10
et c'est quoi que tu as essayé en plus, suite à ma réplique?