Ajouter un commentaire

christe Portrait de christe
JTable actualisé ma Table et JFrame après requête

Bonjour à tous,

Je suis en 2éme année en informatique de gestion à Bruxelles. Cela fait environ 20 heures que je m'arrache les cheveux pour tenter d'actualiser ma JTable après une requête d'insertion.

Ce problème m'agace tellement qu'il me pousse (pour la première fois) à écrire sur un forum.... Aidez-moi!

Voici mon code:

De la fenêtre:

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;




public class Fenêtre extends JFrame {
	private static JPanel paneauTable;
	private static JTable table;
	private JButton b1;
	private static ResultSetTableModel rstm;
	
	
	public Fenêtre(){
		setTitle("FenêtreTest");
		setSize(1000,800);
		Container contenu=new Container();
		paneauTable=new JPanel();
		rstm=DAOrequêtes.Req_VuePlat();
		rstm.addTableModelListener(new Ecouteur());
		table=new JTable();
		table.setModel(rstm);
		paneauTable.add(table);
		b1=new JButton("OK");
		contenu.setLayout(new BorderLayout());
		contenu.add(paneauTable,BorderLayout.CENTER);
		contenu.add(b1,BorderLayout.SOUTH);
		b1.addActionListener(new Ecouteur());
		this.setContentPane(contenu);
	}
	
	public  void update(){
		rstm.fireTableDataChanged();
		this.repaint();
	
		
	}
	
	public class Ecouteur implements ActionListener,TableModelListener{
		@Override
		public void actionPerformed(ActionEvent arg0) {
			DAOrequêtes.insertPlat();
			update();
			
		}

		@Override
		public void tableChanged(TableModelEvent e) {
			table.repaint();
		}
			
		
	}
}

De mes requêtes:

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;



public class DAOrequêtes{
	private static String requête;
	private static ResultSet rs;
	private static ResultSet rs2;
	/*
	 * REQUETE:FIND PRIMARY KEY
	 */
	public static int newPrimaryKey(String table){
		int maxString;
		try {
			requête="select MAX(ID) from "+table+";";
			PreparedStatement pst=ConnectionToDb.Con().prepareStatement(requête);
			rs=pst.executeQuery();
			String requête1="select COUNT(*) from "+table+" where ID=null";
			Statement st2=ConnectionToDb.Con().createStatement();
			rs2=st2.executeQuery(requête1);
			rs2.next();
			rs.next();
			maxString=rs.getInt(1);
			System.out.println("Valeur de l'Id:" + maxString );
			return maxString+1;
			//catch (NullPointerException e){System.out.println("Ca marche pas, null pointer");}
		   }catch (SQLException e){System.out.println("Ca marche pas, SQlException");return 1; }
			
	}
	public static ResultSetTableModel  Req_VuePlat(){
		try {
	    Statement st = ConnectionToDb.Con().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
		String query1="Select * from Plat";
		ResultSet result=st.executeQuery(query1);
		ResultSetTableModel rtm = new ResultSetTableModel(result);
		return rtm;
	} catch (SQLException e1) {
		System.out.println("Connection Failed!");return null;}
		}
	/*
	 * REQUETE:INSERT INTO
	 */
	public static void insertPlat( ){
		try {
			requête="insert into Plat values("+DAOrequêtes.newPrimaryKey("plat")+",'asperges',3,2,1);";
			Statement st=ConnectionToDb.Con().createStatement();
			st.executeUpdate(requête);
		} catch (SQLException e) {System.out.println("InsertPlat Failed");}
	}	
	
}

DE MON Table Model:

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

import javax.swing.table.AbstractTableModel;


public class ResultSetTableModel extends AbstractTableModel
{
  public ResultSetTableModel( ResultSet resultSet )
  {
    this.resultSet = resultSet;
    
    try 
    {
      this.resultSetMetaData = resultSet.getMetaData();
    } 
    catch (SQLException e) 
    {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
  @Override
  public int getColumnCount()
  {
	try 
    {
      return resultSetMetaData.getColumnCount();
    } 
    catch (SQLException e) 
    {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return 0;
    }
  }

  @Override
  public int getRowCount()
  {
	try
    {
      resultSet.last();
      return resultSet.getRow();
    } 
	catch (SQLException e)
    {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return 0;
    }
  }

  @Override
  public Object getValueAt(int rowIndex, int columnIndex) 
  {
    try
    {
      resultSet.absolute( rowIndex+1);
      return resultSet.getObject(columnIndex+1);
    } 
    catch (SQLException e)
    {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return null;
    }
  }
  
  @Override
  public String getColumnName( int column )
  {
    try 
    {
      return resultSetMetaData.getColumnName( column+1 );
    } 
    catch (SQLException e) 
    {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return "";
    }
  }
  
  private ResultSet resultSet;
  private ResultSetMetaData resultSetMetaData;
  
  	public ResultSetMetaData getMetaData(){
  		return this.resultSetMetaData;
  	}
  	public ResultSet getResultSet(){
  		return this.resultSet;
  	}
}

et Enfin de mon Main.

import javax.swing.JFrame;


public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Fenêtre f1=new Fenêtre();
		f1.setVisible(true);
		f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	}

}

La requête fonctionne une ligne est bien ajoutée dans ma table mais je n'arrive pas a mettre ma fenêtre a jour.

A bientôt?

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
  QQQ    PPPP   U   U  V     V   SSS  
Q Q P P U U V V S
Q Q PPPP U U V V SSS
Q QQ P U U V V S
QQQQ P UUU V SSSS
Q