Interface Graphique : Evenement KeyEvent/ Int Login

Interface Graphique : Evenement KeyEvent/ Int Login - Java - Programmation

Marsh Posté le 05-07-2011 à 20:43:10    

Bonjour,
 
J'ai mis au point un programme qui permet d'enregistrer sur un fichier texte ligne par ligne les caractères tapées par l'utilisateur avec une concaténation linéaire de RELATIVE TIMESTAMP.
 
Le souci c'est que le programme s'exécute après l'appui sur la touche "Enter": Donc le RTS ne s'applique pas correctement puisqu'il relativise le temps d’exécution du programme.
 
Alors qu'il devrait afficher RTS du caractère appuyé par l'utilisateur.
 
Or tout ceci ne peut s’exécuter que par des interfaces graphiques dans laquelle on peut trouver une interface de login\password et le mot de passe est stocké dans le fichier texte comme l'exemple qui suit:
 
L'utilisateur tape le login Manou et le mot de passe abc:
 
Dans le fichier Manou.txt, on trouve ainsi :
 
2011-07-01 16:26:52.388 a
2011-07-01 16:26:52.392 b
2011-07-01 16:26:52.392 c
 
Voici le code:
 

Code :
  1. import java.io.*;
  2. import java.sql.Timestamp;
  3. import java.util.Date;
  4. public class Profile
  5. {
  6. public static String lireString()
  7. {
  8.  String ligne_lue=null;
  9.  try
  10.  {
  11.   InputStreamReader lecteur=new InputStreamReader(System.in);
  12.   BufferedReader entree=new BufferedReader(lecteur);
  13.   ligne_lue=entree.readLine();
  14.  }
  15.  catch(IOException err)
  16.   {
  17.   System.exit(0);
  18.   }
  19.  return ligne_lue;
  20. }
  21. public static void ecrireFichier(String path, String text)
  22. {
  23.  PrintWriter ecri ;
  24.  try
  25.  {
  26.   ecri = new PrintWriter(new FileWriter(path));
  27.   char espace = ' ';
  28.   for (int i=0; i<text.length(); i++)
  29.   {
  30.       char letter = text.charAt(i);
  31.       java.util.Date date= new java.util.Date();
  32.       ecri.print(new Timestamp(date.getTime()));
  33.    ecri.print(espace);
  34.         ecri.println(letter);
  35.   }
  36.   ecri.flush();
  37.   ecri.close();
  38.  }
  39.  catch (NullPointerException a)
  40.  {
  41.   System.out.println("Erreur : pointeur null" );
  42.  }
  43.  catch (IOException a)
  44.  {
  45.   System.out.println("Problème d'IO" );
  46.  }
  47. }
  48. public String lireFichier (String path)
  49. {
  50.  BufferedReader lect ;
  51.  String tmp = "";
  52.  try
  53.  {
  54.   lect = new BufferedReader(new FileReader(path)) ;
  55.   while (lect.ready()==true)
  56.   {
  57.    tmp += lect.readLine() ;
  58.   }
  59.  }
  60.  catch (NullPointerException a)
  61.  {
  62.   System.out.println("Erreur : pointeur null" );
  63.  }
  64.  catch (IOException a)
  65.  {
  66.   System.out.println("Problème d'IO" );
  67.  }
  68.  return tmp;
  69. }
  70. public static void main (String[] args)
  71. {
  72.  String ch="";
  73.  String fichier="";
  74.  System.out.println("Entrer un mot svp:" );
  75.  ch=Profile.lireString();
  76.  System.out.println("Puis entrer le nom du fichier dans lequel les infos seront stockees:" );
  77.  fichier=Profile.lireString();
  78.  ecrireFichier (fichier, ch);
  79.  System.out.println("Le mot que vous avez tape est: " + ch);
  80.  System.out.println("et il est sauvegarde dans: " + fichier);
  81. }
  82. }


 
 
Or il faudrait que cette logique s'implémente avec une interface graphique:
 
Le problème que je rencontre est le suivant:
 
La méthode public void keyPressed(KeyEvent event) doit appeler la fonction ecrireFichier(String path, String text) ou je dois implémenter la lecture et l'écriture caractère par caractère dans le fichier texte Manou.txt et ceci n'esty pas possible car il se trouve que ecri.flush(); et ecri.close(); ne doit se faire qu'une fois.
 
Voici la méthode événementielle :  
 

Code :
  1. public class RecepteurClavier implements KeyListener
  2. {
  3. public void keyPressed(KeyEvent event)
  4. {
  5.  System.out.println("Caractère touche pressée : " + event.getKeyChar());
  6.  char letter = event.getKeyChar();
  7.  
  8.                 °°°°°Ici doit se trouver l'appel de la fonction EcrireFichier°°°°°
  9. }
  10. public void keyReleased(KeyEvent event) {}
  11. public void keyTyped(KeyEvent event) {}   
  12. }


 
Je vous remercie d'avance de m'aider... Je suis un peu perdu!!!


---------------
Manou1980
Reply

Marsh Posté le 05-07-2011 à 20:43:10   

Reply

Marsh Posté le 06-07-2011 à 17:03:48    

Bonjour,
 
Le mot de passe récupéré par un champ texte qui se trouve dans une interface graphique est stocké caractère par caractère dans un fichier texte avec le Relative TimeStamp : 2011-07-06 15:24:16.876
 
Example Demandé: Mot de passe tapé par l'utilisateur : abc
 
Fichier Correspondant contient :
 
2011-07-06 15:24:16.876 a
2011-07-06 15:24:16.878 b
2011-07-06 15:24:16.879 c
 
Mon souci c'est que le fichier affiche que le dernier caractère saisi dans le champ password.
 
Example Réel: Mot de passe tapé par l'utilisateur : abc
 
Fichier Correspondant contient :
 
2011-07-06 15:24:16.879 c
 
 
Voici le code:
 

Code :
  1. import java.io.*;
  2. import java.sql.Timestamp;
  3. import java.util.Date;
  4. import java.awt.*;
  5. import java.awt.event.*;
  6. import javax.swing.*;
  7. import java.awt.event.KeyEvent;
  8. import java.awt.event.KeyListener;
  9. public class Login extends JFrame
  10. {
  11. // Variables declaration
  12. private JLabel jLabel1;
  13. private JLabel jLabel2;
  14. private JTextField jTextField1;
  15. private JPasswordField jPasswordField1;
  16. private JButton jButton1;
  17. private JPanel contentPane;
  18. // End of variables declaration
  19. public Login()
  20. {
  21.  super();
  22.  create();
  23. this.setVisible(true);
  24. }
  25. private void create()
  26. {
  27.  jLabel1 = new JLabel();
  28.  jLabel2 = new JLabel();
  29.  jTextField1 = new JTextField();
  30.  jPasswordField1 = new JPasswordField();
  31.  jButton1 = new JButton();
  32.  contentPane = (JPanel)this.getContentPane();
  33.  //
  34.  // jLabel1
  35.  //
  36.  jLabel1.setHorizontalAlignment(SwingConstants.LEFT);
  37.  jLabel1.setForeground(new Color(0, 0, 255));
  38.  jLabel1.setText("Username:" );
  39.  //
  40.  // jLabel2
  41.  //
  42.  jLabel2.setHorizontalAlignment(SwingConstants.LEFT);
  43.  jLabel2.setForeground(new Color(0, 0, 255));
  44.  jLabel2.setText("Password:" );
  45.  //
  46.  // jTextField1
  47.  //
  48.  jTextField1.setForeground(new Color(0, 0, 255));
  49.  jTextField1.setSelectedTextColor(new Color(0, 0, 255));
  50.  jTextField1.setToolTipText("Enter your username" );
  51.  jTextField1.addActionListener(new ActionListener() {
  52.   public void actionPerformed(ActionEvent e)
  53.   {
  54.    jTextField1_actionPerformed(e);
  55.   }
  56.  });
  57.  //jTextField1.addKeyListener(new RecepteurClavier());
  58.  //
  59.  // jPasswordField1
  60.  //
  61.  jPasswordField1.setForeground(new Color(0, 0, 255));
  62.  jPasswordField1.setToolTipText("Enter your password" );
  63.  jPasswordField1.addActionListener(new ActionListener() {
  64.   public void actionPerformed(ActionEvent e)
  65.   {
  66.    jPasswordField1_actionPerformed(e);
  67.   }
  68.  });
  69.  jPasswordField1.addKeyListener(new RecepteurClavier()); // auquel on rajoute un recepteur clavier
  70.  //
  71.  // jButton1
  72.  //
  73.  jButton1.setBackground(new Color(204, 204, 204));
  74.  jButton1.setForeground(new Color(0, 0, 255));
  75.  jButton1.setText("Login" );
  76.  jButton1.addActionListener(new ActionListener() {
  77.   public void actionPerformed(ActionEvent e)
  78.   {
  79.    jButton1_actionPerformed(e);
  80.   }
  81.  });
  82.  //
  83.  // contentPane
  84.  //
  85.  contentPane.setLayout(null);
  86.  contentPane.setBorder(BorderFactory.createEtchedBorder());
  87.  contentPane.setBackground(new Color(204, 204, 204));
  88.  addComponent(contentPane, jLabel1, 5,10,106,18);
  89.  addComponent(contentPane, jLabel2, 5,47,97,18);
  90.  addComponent(contentPane, jTextField1, 110,10,183,22);
  91.  addComponent(contentPane, jPasswordField1, 110,45,183,22);
  92.  addComponent(contentPane, jButton1, 150,75,83,28);
  93.  //
  94.  // login
  95.  //
  96.  this.setTitle("Login To Members Area" );
  97.  this.setLocation(new Point(76, 182));
  98.  this.setSize(new Dimension(335, 141));
  99.  this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  100.  this.setResizable(false);
  101. }
  102. /** Add Component Without a Layout Manager (Absolute Positioning) */
  103. private void addComponent(Container container,Component c,int x,int y,int width,int height)
  104. {
  105.  c.setBounds(x,y,width,height);
  106.  container.add(c);
  107. }
  108. private void jTextField1_actionPerformed(ActionEvent e)
  109. {
  110. }
  111. private void jPasswordField1_actionPerformed(ActionEvent e)
  112. {
  113. }
  114. private void jButton1_actionPerformed(ActionEvent e)
  115. {
  116.  System.out.println("\njButton1_actionPerformed(ActionEvent e) called." );
  117.  String username = new String(jTextField1.getText());
  118.  String password = new String(jPasswordField1.getText());
  119.  if(username.equals("" ) || password.equals("" )) // If password and username is empty > Do this >>>
  120.  {
  121.   jButton1.setEnabled(false);
  122.   JLabel errorFields = new JLabel("<HTML><FONT COLOR = Blue>You must enter a username and password to login.</FONT></HTML>" );
  123.   JOptionPane.showMessageDialog(null,errorFields);
  124.   jTextField1.setText("" );
  125.   jPasswordField1.setText("" );
  126.   jButton1.setEnabled(true);
  127.   this.setVisible(true);
  128.  }
  129.  else
  130.  {
  131.   JLabel optionLabel = new JLabel("<HTML><FONT COLOR = Blue>You entered</FONT><FONT COLOR = RED> <B>"+username+"</B></FONT> <FONT COLOR = Blue>as your username.<BR> Is this correct?</FONT></HTML>" );
  132.   int confirm =JOptionPane.showConfirmDialog(null,optionLabel);
  133.   switch(confirm)
  134.   { // Switch > Case
  135.    case JOptionPane.YES_OPTION: // Attempt to Login user
  136.     jButton1.setEnabled(false); // Set button enable to false to prevent 2 login attempts
  137.     break;
  138.    case JOptionPane.NO_OPTION: // No Case.(Go back. Set text to 0)
  139.     jButton1.setEnabled(false);
  140.     jTextField1.setText("" );
  141.     jPasswordField1.setText("" );
  142.     jButton1.setEnabled(true);
  143.     break;
  144.    case JOptionPane.CANCEL_OPTION: // Cancel Case.(Go back. Set text to 0)
  145.     jButton1.setEnabled(false);
  146.     jTextField1.setText("" );
  147.     jPasswordField1.setText("" );
  148.     jButton1.setEnabled(true);
  149.     break;
  150.   } // End Switch > Case
  151.  }
  152. }
  153.  public static void ecrireFichier(String path, char letter)
  154. {
  155.  PrintWriter ecri = null;
  156.  try
  157.  {
  158.   ecri = new PrintWriter(new FileWriter(path));
  159.   char espace = ' ';
  160.   java.util.Date date= new java.util.Date();
  161.      ecri.print(new Timestamp(date.getTime()));
  162.   ecri.print(espace);
  163.        ecri.println(letter);
  164.  }
  165.  catch (NullPointerException a)
  166.  {
  167.   System.out.println("Erreur : pointeur null" );
  168.  }
  169.  catch (IOException a)
  170.  {
  171.   System.out.println("Problème d'IO" );
  172.  }
  173.  if(ecri != null)
  174.  {
  175.  ecri.flush();
  176.  ecri.close();
  177.  }
  178. }
  179. public static void main(String[] args)
  180. {
  181.  JFrame.setDefaultLookAndFeelDecorated(true);
  182.  JDialog.setDefaultLookAndFeelDecorated(true);
  183.  try
  184.  {
  185.   UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel" );
  186.  }
  187.  catch (Exception ex)
  188.  {
  189.  System.out.println("Failed loading L&F: " );
  190.  System.out.println(ex);
  191.  }
  192.  new Login();
  193. };
  194. public class RecepteurClavier implements KeyListener
  195. {
  196.  public void keyPressed(KeyEvent event)
  197.  {
  198.   char letter = event.getKeyChar();
  199.          Login.ecrireFichier( "Password.txt", letter);
  200.  
  201.  }
  202.  public void keyReleased(KeyEvent event) {}
  203.  public void keyTyped(KeyEvent event) {}   
  204. }
  205. }


---------------
Manou1980
Reply

Marsh Posté le 06-07-2011 à 17:28:58    

Ce qui se passe c'est qu'à chaque fois j'écrase mon fichier !

Reply

Marsh Posté le 06-07-2011 à 18:02:33    

J'ai essayé avec la fonction ecrireFinFichier mais ça ne marche pas!
 

Code :
  1. public static void ecrireFinFichier(String path, String texte)
  2. {
  3.  FileWriter writer = null;
  4.  String texte = "";
  5.  char espace = ' ';
  6.  try
  7.  {
  8.         writer = new FileWriter("FichierPass.txt", true);
  9.         writer.write(texte,0,texte.length());
  10.   java.util.Date date= new java.util.Date();
  11.   writer.write(espace);
  12.        writer.writeln(letter);
  13.  }
  14.  catch(IOException ex)
  15.  {
  16.        ex.printStackTrace();
  17.  }
  18.  finally
  19.  {
  20.      if(writer != null)
  21.   {
  22.         writer.close();
  23.      }
  24.  }
  25. }


---------------
Manou1980
Reply

Marsh Posté le 06-07-2011 à 19:03:10    

C'est bon j'ai trouvé :)  :)  :)


---------------
Manou1980
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed