IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques en Java Discussion :

ajouter la date et l'heure actuel dans une fenêtre qui contient un tableau datafile


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Par défaut ajouter la date et l'heure actuel dans une fenêtre qui contient un tableau datafile
    Bonjour, je voudrai intégré la date et l'heure dans une fenêtre courante qui contient un tableau lu à partir d'un fichier voici le programme java du tableau :

    [DataFileTableModel.java]
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    import javax.swing.*;
    import javax.swing.table.*;
    import javax.swing.event.*;
    import java.io.*;
    import java.util.*;
     
    public class DataFileTableModel extends AbstractTableModel {
     
        protected Vector data;
        protected Vector columnNames ;
        protected String datafile;
     
        public DataFileTableModel(String f){
            datafile = f;
            initVectors();
        }
     
        public void initVectors() {
     
            String aLine ;
            data = new Vector();
            columnNames = new Vector();
     
            try {
                FileInputStream fin =  new FileInputStream(datafile);
                BufferedReader br = new BufferedReader(new InputStreamReader(fin));
                // extract column names
                StringTokenizer st1 =
                        new StringTokenizer(br.readLine(), "|");
                while(st1.hasMoreTokens())
                    columnNames.addElement(st1.nextToken());
                // extract data
                while ((aLine = br.readLine()) != null) {
                    StringTokenizer st2 =
                            new StringTokenizer(aLine, "|");
                    while(st2.hasMoreTokens())
                        data.addElement(st2.nextToken());
                }
                br.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
     
        public int getRowCount() {
            return data.size() / getColumnCount();
        }
     
        public int getColumnCount(){
            return columnNames.size();
        }
     
        public String getColumnName(int columnIndex) {
            String colName = "";
     
            if (columnIndex <= getColumnCount())
                colName = (String)columnNames.elementAt(columnIndex);
     
            return colName;
        }
     
        public Class getColumnClass(int columnIndex){
            return String.class;
        }
     
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return false;
        }
     
        public Object getValueAt(int rowIndex, int columnIndex) {
            return (String)data.elementAt( (rowIndex * getColumnCount()) + columnIndex);
        }
     
        public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
            return;
        }
    }

    [DataFileTable.java]
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    import java.io.*;
    import java.util.*;
     
    public class DataFileTable extends JPanel {
        public DataFileTable(String dataFilePath) {
            JTable table;
            DataFileTableModel model;
            Font f;
     
            f = new Font("SanSerif",Font.PLAIN,24);
            setFont(f);
            setLayout(new BorderLayout());
     
            model = new DataFileTableModel(dataFilePath);
     
            table = new JTable();
            table.setModel(model);
            table.createDefaultColumnsFromModel();
     
            JScrollPane scrollpane = new JScrollPane(table);
            add(scrollpane);
        }
     
        public Dimension getPreferredSize(){
            return new Dimension(400, 300);
        }
     
        public static void main(String s[]) {
            JFrame frame = new JFrame("Data File Table");
            DataFileTable panel;
     
            panel = new DataFileTable("customers.dat");
     
            frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
            frame.setForeground(Color.black);
            frame.setBackground(Color.lightGray);
            frame.getContentPane().add(panel,"Center");
     
            frame.setSize(panel.getPreferredSize());
            frame.setVisible(true);
            frame.addWindowListener(new WindowCloser());
        }
    }
     
    class WindowCloser extends WindowAdapter {
        public void windowClosing(WindowEvent e) {
            Window win = e.getWindow();
            win.setVisible(false);
            System.exit(0);
        }
    }

    Merci pour le Help !

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    S'il s'agit d'afficher juste la date et l'heure de manière statique, il suffit d'ajouter dans le DataFilePanel qui affiche la JTable, un autre composant, comme un JLabel par exemple (il faudra peut-être adapter ton layout, ou ajouter un panel intermédiaire selon l'endroit où tu souhaites l'afficher), dont le texte correspond à la date (qu'on obtient avec la classe java.util.Date), formatée comme tu souhaites (à l'aide de java.text.SimpleDateFormat). S'il faut qu'elle se mette à jour de manière continue, il faudra procéder de la même manière, mais en plus modifier le texte du JLabel chaque fois que nécessaire (si le format affiche les secondes, changer le texte toutes les secondes, par exemple), en utilisant un Timer par exemple.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Par défaut
    Merci pour votre réponse, j'ai essayé de faire ça en rajoutant l'heure et la date pour l'afficher en temps réel mais mon programme plante voici ce que j'ai écris :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.Window;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JTextField;
    import javax.swing.text.JTextComponent;
     
     
    public class DataFileTable extends JFrame {
          private JTextField jtextTime;
          private JTextField jtextDate;
      public DataFileTable(String dataFilePath) {
          jtextTime = new JTextField();
          jtextTime = new JTextField();
          jtextTime.setEditable(false);
          jtextTime.setFont(new Font("sansserif", Font.PLAIN, 20));
          jtextDate = new JTextField();
          jtextDate.setEditable(false);
          jtextDate.setFont(new Font("sansserif", Font.PLAIN, 20));
     
          JPanel content = new JPanel();
           content.add(jtextDate);
            content.add(jtextTime);
    //        frame.setContentPane(content);
          javax.swing.Timer t = new javax.swing.Timer(1000, new ClockListener());
          t.start();
          this.setLocationRelativeTo(null);
          this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          this.setContentPane(content);
        JTable table;
        DataFileTableModel model;
        Font f;
     
        f = new Font("SanSerif",Font.PLAIN,24);
        setFont(f);
     //   setLayout(new BorderLayout());
     
        model = new DataFileTableModel(dataFilePath);
     
        table = new JTable();
        table.setModel(model);
        table.createDefaultColumnsFromModel();
        JPanel pan = new JPanel();
        JScrollPane scrollpane = new JScrollPane(table);
    //    scrollpane.add(button);//Add button 
        add(scrollpane);
        add(pan, BorderLayout.SOUTH);
     
      }
     
     
     
      class ClockListener implements ActionListener {
          public void actionPerformed(ActionEvent e) {
              SimpleDateFormat dh = new SimpleDateFormat("dd/MM/yyyy");
              SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
              JTextComponent jtextDate = null;
            jtextDate.setText(dh.format(Calendar.getInstance().getTime()));
              JTextComponent jtextTime = null;
            jtextTime.setText(df.format(Calendar.getInstance().getTime()));
          }
      }
     
      public Dimension getPreferredSize(){ 
     
            return new Dimension(400, 300);
            }
     
         public static void main(String s[]) {
             JTextField jtextTime = null;
             JTextField jtextDate = null;
            JFrame frame = new JFrame("Data File Table");
     
     
            DataFileTable panel;
            panel = new DataFileTable("bla.txt");
     
     
     
            frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    //        frame.getContentPane().add(content, BorderLayout.SOUTH);
            frame.setForeground(Color.black);
            frame.setBackground(Color.lightGray);
            frame.getContentPane().add(panel,"center");
        //    frame.getContentPane().add(content,"center");
     
     
            frame.setSize(panel.getPreferredSize());
            frame.setVisible(true);
            frame.addWindowListener(new WindowCloser());
            }
         }
     
        class WindowCloser extends WindowAdapter {
         public void windowClosing(WindowEvent e) {
           Window win = e.getWindow();
           win.setVisible(false);
           System.exit(0);
            }
     
        }




    voici ce que j'ai comme erreur:

    Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a container
        at java.awt.Container.checkNotAWindow(Unknown Source)
        at java.awt.Container.addImpl(Unknown Source)
        at java.awt.Container.add(Unknown Source)
        at DataFileTable.main(DataFileTable.java:96)
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at DataFileTable$ClockListener.actionPerformed(DataFileTable.java:70)
        at javax.swing.Timer.fireActionPerformed(Unknown Source)
        at javax.swing.Timer$DoPostEvent.run(Unknown Source)
        at java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$200(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Par défaut
    Voici un exemple du fichier pour l'affichage

    Numero|Heure
    A209 | 10:30
    B308 | 11:00
    C206 | 11:30
    D305 | 12:00

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JTextComponent jtextDate = null;        jtextDate.setText(dh.format(Calendar.getInstance().getTime()));
              JTextComponent jtextTime = null;         jtextTime.setText(df.format(Calendar.getInstance().getTime()));

    Bah, oui, tu déclares une variable jtextDate, sans l'affecter, et tu appelles tout de suite après une méthode : forcément ta variable ne pointe sur aucun objet, et, donc, tu obtiens une NullPointerException.

    Ce sont les variables que tu déclares dans DateFileTable dont il faut changer le texte. Celles-là :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class DataFileTable extends JFrame {      private JTextField jtextTime;
          private JTextField jtextDate;
          ...

    Ensuite, pourquoi utiliser des JTextField et les rendre non éditable : un JTextField est un champ de saisie. Je t'ai dit d'utiliser un JLabel. C'est quand même plus logique d'utiliser un composant d'affichage pour afficher, que d'utiliser un champ de saisie et de le rendre non éditable.

    Sinon, simplifies et optimises le code (qui s'exécute dans un Timer), en créant une seule instance de date (par un new Date(), voire même directement en faisant un System.currentTimeMillis()), en la formatant cette même instance/valeur avec les deux formatteurs. Evites également de créer les formats à chaque appel, en les mettant en variables membre de ta classe de ActionListener.

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class ClockListener implements ActionListener {
       SimpleDateFormat dh = new SimpleDateFormat("dd/MM/yyyy");
       SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
         public void actionPerformed(ActionEvent e) {
            long date = System.currentTimeMillis();
            jtextDate.setText(dh.format(date));
            jtextTime.setText(df.format(date));
       } 
      }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 9
    Par défaut
    Merci pour votre réponse, mais je suis toujours un peu perdu ! J'ai utilisé maintenant un JLabel au lieu d'un JTextField mais je n'arrive pas toujours avoir l'affichage désiré ! voici ce que j'ai fait :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.Window;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.text.SimpleDateFormat;
     
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
     
     
    public class DataFileTable extends JFrame {
          private JLabel jtextTime;
          private JLabel jtextDate;
      public DataFileTable(String dataFilePath) {
          jtextTime = new JLabel ();
          jtextTime.setFont(new Font("sansserif", Font.PLAIN, 20));
          jtextDate = new JLabel ();
          jtextDate.setFont(new Font("sansserif", Font.PLAIN, 20));
     
          JPanel content = new JPanel();
           content.add(jtextDate);
            content.add(jtextTime);
          javax.swing.Timer t = new javax.swing.Timer(1000, new ClockListener());
          t.start();
          this.setLocationRelativeTo(null);
          this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          this.setContentPane(content);
        JTable table;
        DataFileTableModel model;
        Font f;
     
        f = new Font("SanSerif",Font.PLAIN,24);
        setFont(f);
     
        model = new DataFileTableModel(dataFilePath);
     
        table = new JTable();
        table.setModel(model);
        table.createDefaultColumnsFromModel();
        JPanel pan = new JPanel();
        JScrollPane scrollpane = new JScrollPane(table);
        add(scrollpane);
        add(pan, BorderLayout.SOUTH);
     
      }
     
      class ClockListener implements ActionListener {
           SimpleDateFormat dh = new SimpleDateFormat("dd/MM/yyyy");
           SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
             public void actionPerformed(ActionEvent e) {
                long date = System.currentTimeMillis();
                jtextDate.setText(dh.format(date));
                jtextTime.setText(df.format(date));
           }
      }
     
     
      public Dimension getPreferredSize(){ 
     
            return new Dimension(400, 300);
            }
     
         public static void main(String s[]) {
            JFrame frame = new JFrame("Data File Table");
            DataFileTable panel;
            panel = new DataFileTable("bla.txt");
     
     
     
            frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
            frame.setForeground(Color.black);
            frame.setBackground(Color.lightGray);
            frame.getContentPane().add(panel,"center");
     
     
            frame.setSize(panel.getPreferredSize());
            frame.setVisible(true);
            frame.addWindowListener(new WindowCloser());
            }
         }
     
        class WindowCloser extends WindowAdapter {
         public void windowClosing(WindowEvent e) {
           Window win = e.getWindow();
           win.setVisible(false);
           System.exit(0);
            }
     
        }
    et j'ai le message d'erreur :

    Exception in thread "main" java.lang.IllegalArgumentException: adding a window to a container
        at java.awt.Container.checkNotAWindow(Unknown Source)
        at java.awt.Container.addImpl(Unknown Source)
        at java.awt.Container.add(Unknown Source)
        at DataFileTable.main(DataFileTable.java:103)

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/10/2013, 20h15
  2. [JSP]Comment afficher l'heure actuel dans une page JSP?
    Par adil_vpb dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 19/02/2007, 15h32
  3. suppression dans une table qui contient une clé etrangère
    Par zana74 dans le forum Décisions SGBD
    Réponses: 13
    Dernier message: 08/08/2006, 10h58
  4. Réponses: 18
    Dernier message: 30/09/2005, 09h30
  5. inserer la date et l'heure systeme dans une table
    Par argon dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/07/2005, 08h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo