tequilla76 | Bonjour,
je voudrais rafraichir ma JTable à chaque fois que je clique sur le bouton "valider". J'essaie le fireTableDataChanged(), le repaint(), cacher et rendre visible de nouveau la Jtable et je n'y arrive pas. J'ai lu des trucs sur le fireTableDataChanged mais je dois mal m'y prendre, pouvait vous m'aider svp?
Code :
- import javax.swing.*;
- import java.awt.*;
- import java.awt.event.*;
- import java.io.*;
- import java.util.*;
- import javax.swing.table.*;
- import javax.swing.event.*;
- import javax.swing.event.TableModelEvent;
- import javax.swing.table.AbstractTableModel;
- import java.util.Vector;
- import java.sql.*;
- class Films implements ActionListener
- {
- /*Déclaration des variables globales*/
- JFrame fenetrePrincipale;//Fenêtre principale
- /*fenêtres auxiliaires lors d'un clic sur un des boutons
- *de la fenêtre principale*/
- JButton bDivx;
- JButton bDvd;
- JTable tableDvd, tableDivx;
- JTextField saisieDivx, saisieDvd;
- JButton validerDivx, validerDvd;
- JLabel nom;
-
- String pilote = "sun.jdbc.odbc.JdbcOdbcDriver";//DRIVER
- String host = "jdbc:odbc:DRIVER=Microsoft Access Driver (*.mdb); DBQ=Films.mdb; ";//PATH
- String login = "";// USER
- String pw = "";//PASSWORD
- JDBCAdapter dataBase;
-
- //-----------------------------------------------------------------------
- //Constructeur qui crée la fenêtre principale
- private Films()
- {
- fenetrePrincipale=new JFrame("Liste films" );
-
- bDivx=new JButton("Divx" );
- bDvd=new JButton("DVD" );
- fenetrePrincipale.setLayout(new FlowLayout());
- fenetrePrincipale.setLocation(400,300);
- fenetrePrincipale.setSize(170,70);
- fenetrePrincipale.setResizable(false);
-
- bDivx.addActionListener(this);
- bDvd.addActionListener(this);
-
- fenetrePrincipale.add(bDivx);
- fenetrePrincipale.add(bDvd);
-
- fenetrePrincipale.setVisible(true);
-
- dataBase = new JDBCAdapter(pilote,host,login,pw);
- }
-
-
- public void actionPerformed(ActionEvent evt)
- {
- if((evt.getSource())==bDivx)
- {
- divx();
- bDivx.setEnabled(false);
- }
-
- if((evt.getSource())==bDvd)
- {
- dvd();
- bDvd.setEnabled(false);
- }
-
- if((evt.getSource())==validerDivx)
- {
- dataBase.executeQuery("INSERT INTO Divx (titre_Divx) VALUES ('"+saisieDivx.getText()+"')" );
- saisieDivx.setText("" );
- }
-
- if((evt.getSource())==validerDvd)
- {
- dvd();
- bDvd.setEnabled(false);
- }
- }
- //Fenêtre pour les divx
- public void divx()
- {
- JFrame fenetreDivx;//fenêtre d'affichage des Divx
-
- JPanel p=new JPanel();
- p.setLayout(new FlowLayout());
-
- fenetreDivx=new JFrame();
- fenetreDivx.setSize(750,800);
-
- saisieDivx=new JTextField(45);
- validerDivx=new JButton("Valider" );
- validerDivx.addActionListener(this);
- nom=new JLabel("Nom:" );
-
- p.add(nom);
- p.add(saisieDivx);
- p.add(validerDivx);
-
- fenetreDivx.add(p,BorderLayout.SOUTH);
-
- tableDivx=new JTable();
- fenetreDivx.add(tableDivx,BorderLayout.CENTER);
-
- dataBase.executeQuery("SELECT titre_Divx FROM Divx" );
- tableDivx.setModel(dataBase);
-
- fenetreDivx.setVisible(true);
- }
-
-
- //Fenêtre pour les dvd
- public void dvd()
- {
- JFrame fenetreDvd;
-
- JPanel p=new JPanel();
- p.setLayout(new FlowLayout());
-
- fenetreDvd=new JFrame("Liste des DVD" );
- fenetreDvd.setSize(750,800);
-
- saisieDvd=new JTextField(45);
- validerDvd=new JButton("Valider" );
- validerDvd.addActionListener(this);
- nom=new JLabel("Nom:" );
-
- p.add(nom);
- p.add(saisieDvd);
- p.add(validerDvd);
-
- fenetreDvd.add(p,BorderLayout.SOUTH);
-
- tableDvd=new JTable();
- fenetreDvd.add(tableDvd,BorderLayout.CENTER);
-
- dataBase.executeQuery("SELECT titre_DVD FROM DVD" );
- tableDvd.setModel(dataBase);
-
- fenetreDvd.setVisible(true);
- }
-
- //Méthode applelée lors du lancement du fichier java
- public static void main(String[] arg)
- {
- Films test=new Films();
- }
- }
|
Code :
- import java.util.Vector;
- import java.sql.*;
- import javax.swing.table.AbstractTableModel;
- import javax.swing.event.TableModelEvent;
- public class JDBCAdapter extends AbstractTableModel {
- Connection connection;
- Statement statement;
- ResultSet resultSet;
- String[] columnNames = {};
- Vector rows = new Vector();
- ResultSetMetaData metaData;
- public JDBCAdapter(String driverName,String url,
- String user, String passwd) {
- try {
- Class.forName(driverName);
- System.out.println("Opening db connection" );
- connection = DriverManager.getConnection(url, user, passwd);
- //statement = connection.createStatement();
- statement = connection.createStatement(
- ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE );
- }
- catch (ClassNotFoundException ex) {
- System.err.println("Cannot find the database driver classes." );
- System.err.println(ex);
- }
- catch (SQLException ex) {
- System.err.println("Cannot connect to this database." );
- System.err.println(ex);
- }
- }
- public void executeQuery(String query) {
- if (connection == null || statement == null) {
- System.err.println("There is no database to execute the query." );
- return;
- }
- try {
- resultSet = statement.executeQuery(query);
- metaData = resultSet.getMetaData();
- int numberOfColumns = metaData.getColumnCount();
- columnNames = new String[numberOfColumns];
- // Get the column names and cache them.
- // Then we can close the connection.
- for(int column = 0; column < numberOfColumns; column++) {
- columnNames[column] = metaData.getColumnLabel(column+1);
- }
- // Get all rows.
- rows = new Vector();
- while (resultSet.next()) {
- Vector newRow = new Vector();
- for (int i = 1; i <= getColumnCount(); i++) {
- newRow.addElement(resultSet.getObject(i));
- }
- rows.addElement(newRow);
- }
- // close(); Need to copy the metaData, bug in jdbc:odbc driver.
- fireTableChanged(null); // Tell the listeners a new table has arrived.
-
- }
- catch (SQLException ex) {
- System.err.println(ex);
- }
- }
- public void close() throws SQLException {
- System.out.println("Closing db connection" );
- resultSet.close();
- statement.close();
- connection.close();
- }
- protected void finalize() throws Throwable {
- close();
- super.finalize();
- }
- //////////////////////////////////////////////////////////////////////////
- //
- // Implementation of the TableModel Interface
- //
- //////////////////////////////////////////////////////////////////////////
- // MetaData
- public String getColumnName(int column) {
- if (columnNames[column] != null) {
- return columnNames[column];
- } else {
- return "";
- }
- }
- public Class getColumnClass(int column) {
- int type;
- try {
- type = metaData.getColumnType(column+1);
- }
- catch (SQLException e) {
- return super.getColumnClass(column);
- }
- switch(type) {
- case Types.CHAR:
- case Types.VARCHAR:
- case Types.LONGVARCHAR:
- return String.class;
- case Types.BIT:
- return Boolean.class;
- case Types.TINYINT:
- case Types.SMALLINT:
- case Types.INTEGER:
- return Integer.class;
- case Types.BIGINT:
- return Long.class;
- case Types.FLOAT:
- case Types.DOUBLE:
- return Double.class;
- case Types.DATE:
- return java.sql.Date.class;
- default:
- return Object.class;
- }
- }
- public boolean isCellEditable(int row, int column) {
- try {
- return metaData.isWritable(column+1);
- }
- catch (SQLException e) {
- return false;
- }
- }
- public int getColumnCount() {
- return columnNames.length;
- }
- // Data methods
- public int getRowCount() {
- return rows.size();
- }
- public Object getValueAt(int aRow, int aColumn) {
- Vector row = (Vector)rows.elementAt(aRow);
- return row.elementAt(aColumn);
- }
- public String dbRepresentation(int column, Object value) {
- int type;
- if (value == null) {
- return "null";
- }
- try {
- type = metaData.getColumnType(column+1);
- }
- catch (SQLException e) {
- return value.toString();
- }
- switch(type) {
- case Types.INTEGER:
- case Types.DOUBLE:
- case Types.FLOAT:
- return value.toString();
- case Types.BIT:
- return ((Boolean)value).booleanValue() ? "1" : "0";
- case Types.DATE:
- return value.toString(); // This will need some conversion.
- default:
- return "\""+value.toString()+"\"";
- }
- }
- public void setValueAt(Object value, int row, int column) {
- try {
- String tableName = metaData.getTableName(column+1);
- // Some of the drivers seem buggy, tableName should not be null.
- if (tableName == null) {
- System.out.println("Table name returned null." );
- }
- String columnName = getColumnName(column);
- String query =
- "update "+tableName+
- " set "+columnName+" = "+dbRepresentation(column, value)+
- " where ";
- // We don't have a model of the schema so we don't know the
- // primary keys or which columns to lock on. To demonstrate
- // that editing is possible, we'll just lock on everything.
- for(int col = 0; col<getColumnCount(); col++) {
- String colName = getColumnName(col);
- if (colName.equals("" )) {
- continue;
- }
- if (col != 0) {
- query = query + " and ";
- }
- query = query + colName +" = "+
- dbRepresentation(col, getValueAt(row, col));
- }
- System.out.println(query);
- System.out.println("Not sending update to database" );
- statement.executeQuery(query);
- }
- catch (SQLException e) {
- // e.printStackTrace();
- System.err.println("Update failed" );
- }
- Vector dataRow = (Vector)rows.elementAt(row);
- dataRow.setElementAt(value, column);
- }
- }
|
|