Partage
  • Partager sur Facebook
  • Partager sur Twitter

timer + jframe

Sujet résolu
    22 mars 2007 à 17:58:01

    Salut!!

    Je voudrais réactualiser l'affichage d'informations d'une BD dans une jtable qui est affichée dans une fenêtre toute les n secondes, pour cela j'utilise un timer mais le problème est que si je mets tout mon code dans la méthode run() du timer :plusieurs fenêtres s'affichent et sinon (si je ne mets que la requête d'accès à la base de données et l'affichage de la table):certaines variables (panel, jframe...) ne sont plus reconnus.

    aidez moi svp c'est très important pour moi!!!

    Voivi le code que j'utilise:

    package mon_package;

    import java.util.Timer;
    import java.util.TimerTask;
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.Dimension;
    import java.sql.*;
    import java.util.Vector;
    import javax.swing.table.DefaultTableModel;
    import java.util.Timer;
    import java.util.TimerTask;

    public class test1 {

    public static void main(String[] args) {
    Timer minuteur = new Timer();

    /*******************************************************************************/

    // Charger le pilote Oracle
    try {
    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
    }
    catch (SQLException ex) {
    }


    /*******************************************************************************/
    TimerTask tache = new TimerTask() {
    public void run() {
    System.out.println("coucou !");

    // Connexion à la base de données
    Connection conn = null;
    try {
    conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:nom_base", "login", "password");
    Statement stmt = conn.createStatement();
    ResultSet rset = stmt.executeQuery ("select * from table");

    // Affichage du résultat

    Vector values = new Vector();
    while(rset.next())
    {
    Vector tab = new Vector();
    tab.add(rset.getString("col1")); //on met le nom exact de la colonne affichée dans la base
    //a refaire pour les autres colones
    tab.add(rset.getString("col2"));
    tab.add(rset.getString("col3"));
    values.add(tab);
    }
    Vector names= new Vector();


    names.addElement("titre1");
    //a refaire pour plus de colone
    names.addElement("titre2");
    names.addElement("titre3");
    names.addElement("titre4");

    DefaultTableModel model = new DefaultTableModel(values, names);

    JTable tab1 = new JTable(model);

    JPanel pan = new JPanel();
    //Définition de la taille du tableau
    tab1.setPreferredScrollableViewportSize(new Dimension(1000, 600));



    //Ajout d'une scrollBar en cas de dépassement de la dimension
    pan.add(new JScrollPane(tab1));

    //nouvelle fenêtre
    JFrame fen = new JFrame();

    //taille de la fenêtre
    fen.setSize(500, 500);

    //Ajout du JPanel a la JFrame
    fen.setContentPane(pan);
    }
    catch (SQLException ex) {
    }


    }
    };
    minuteur.schedule(tache, 0, 1000);
    }
    }
    • Partager sur Facebook
    • Partager sur Twitter
      23 mars 2007 à 14:59:47

      Tu as essayer un déclarant tes variables d'objet graphique à l'extérieur de tout traitement de façon à les rendre accessible dans tout ton code... genre:


      package mon_package;

      import java.util.Timer;
      import java.util.TimerTask;
      import javax.swing.*;
      import javax.swing.event.*;
      import java.awt.Dimension;
      import java.sql.*;
      import java.util.Vector;
      import javax.swing.table.DefaultTableModel;
      import java.util.Timer;
      import java.util.TimerTask;

      public class test1 {

      private JFrame fen;
      private JPanel pan;
      private JTable tab1;

      public static void main(String[] args) {
      Timer minuteur = new Timer();

      //etc...


      Ainsi tu auras accès à tes composants graphique partout...
      • Partager sur Facebook
      • Partager sur Twitter
        23 mars 2007 à 17:50:42

        Salut!

        ça n'a pas marché en les déclarant en dehors de tout traitement, par contre ça marche en déclarant la fenêtre (final JFrame f = new JFrame("Application");) en dehors de la méthode run main à l'intérieur du main.

        Voila et merci pour ton aide!
        • Partager sur Facebook
        • Partager sur Twitter

        timer + jframe

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown