Partage
  • Partager sur Facebook
  • Partager sur Twitter

Listener sur jtextfield

    11 décembre 2019 à 22:10:28

    Bonjour. je voudrais appeler une fonction lorsqu'un utilisateur entre du texte dans un jtextfield mais je ne sais pas comment m'y prendre.

    Voici mon code. J'aimerai appeler la fonction actionlistener() lorsque l'utilisateur tape quelque chose dans le jtextfield username ou password.

    Il me dit qu'il y a un problème avec ma classe login :

    Multiple markers at this line

    - The serializable class Login does not declare a static final serialVersionUID field of type long

    - The type Login must implement the inherited abstract method 

    ActionListener.actionPerformed(ActionEvent)


    public class Login extends JFrame implements ActionListener{
        private JFrame frame;
        private JButton btnLogin, btnRegister;
        private JTextField tfUsername;
        private JPasswordField tfPassword;
        private JLabel lblUsername, lblPassword;
        private GridBagLayout gbl;
        private GridBagConstraints gbc;
        private String title = "nfa035_TP_30_Login";
        private static int height       = 400;
        private static int left         = 1100;
        private static int top          = 140;
        private static int width        = 200;
     
        public Login() {
            // System.out.println(" coucou Tp30Ihm");
     
            frame = new JFrame(title);
            btnLogin = new JButton("Se loguer");
            btnRegister = new JButton("S'enregistrer");
            tfUsername = new JTextField(15);
            tfUsername.addActionListener(this);
            tfPassword = new JPasswordField(15);
            tfPassword.addActionListener(this);
            lblUsername = new JLabel("Nom");
            lblPassword = new JLabel("Mot de passe");
            gbc = new GridBagConstraints();
            gbl = new GridBagLayout();
     
            frame.setLayout(gbl);
            layoutComponents(0, 0, 1, 1, lblUsername, frame); 
            layoutComponents(0, 2, 1, 1, lblPassword, frame);
            layoutComponents(0, 1, 3, 1, tfUsername, frame);
            layoutComponents(0, 3, 3, 1, tfPassword, frame);
            layoutComponents(1, 4, 1, 1, btnLogin, frame);
            layoutComponents(2, 4, 1, 1, btnRegister, frame);
     
            frame.setSize( height, width);
            frame.setLocation(left, top);
            frame.getContentPane().setBackground(Color.LIGHT_GRAY);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            // frame.pack();     done _why-is-it-worth-with , because all components are supperposés et JTextField are the largest one component
            frame.setVisible(true);
            frame.setAlwaysOnTop(true);
    
        }
        
        private void actionListener (ActionEvent evt) {
    		if (tfUsername.getText().isEmpty() || tfPassword.getPassword().length==0) {
    			btnLogin.setEnabled(false);
    		}
    		else {
    			btnLogin.setEnabled(true);
    		}
    		
    		if (tfUsername.getText().isEmpty() && tfPassword.getPassword().length==0) {
    			btnLogin.setVisible(false);
    		}
    		else {
    			btnLogin.setVisible(true);
    		}
        }
     
        private void layoutComponents(int x, int y, int width, int height, JComponent addThis, JFrame addTo) {
            gbc.gridx = x;
            gbc.gridy = y;
            gbc.gridwidth = width;
            gbc.gridheight = height;
            // addThis.updateUI();
            // addThis.setVisible(true);
            gbc.fill = GridBagConstraints.HORIZONTAL;
            addTo.add(addThis, gbc);
        }
    



    -
    Edité par -Crixus- 12 décembre 2019 à 1:37:43

    • Partager sur Facebook
    • Partager sur Twitter

    "Etre vrai, peu le peuvent."
    Friedrich Nietzsche

      12 décembre 2019 à 1:40:05

      Salut,

      Je t'avoue que ton explication était pas super détaillée et pas super clair mais je pense avoir quelques solutions à te proposer.

      Si le code ne convient pas à ce que tu veux faire, réeexplique la situation mais cette fois-ci avec des détails et ce que tu veux réaliser.

      import javax.swing.*;
      import java.awt.*;
      import java.awt.event.ActionEvent;
      import java.awt.event.ActionListener;
      import java.awt.event.KeyAdapter;
      import java.awt.event.KeyEvent;
      
      public class UtilitaireSwing {
      
          public static void main(String[] args) {
              vbasic();
          }
      
          UtilitaireSwing() {
              vbasic();
          }
          static JTextField nom = new JTextField("");
          static JTextField prenom = new JTextField("");
          static JButton logger = new JButton("Se logger");
          static JButton enregister = new JButton("S'enregistrer");
      
          private static void vbasic() {
      
              //creation de la fenêtre principale
              JFrame frame = new JFrame("vbasic");
              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
              //creation du conteneur
              JPanel conteneur = new JPanel();
              frame.add(conteneur);
              conteneur.setLayout(new BoxLayout(conteneur, BoxLayout.PAGE_AXIS));
      
              //creation du conteneur de champ et des boutton
              JPanel champ = new JPanel();
              conteneur.add(champ);
              champ.setLayout(new BoxLayout(champ, BoxLayout.PAGE_AXIS));
              JPanel boutton = new JPanel();
              conteneur.add(boutton);
              boutton.setLayout(new BoxLayout(boutton, BoxLayout.LINE_AXIS));
      
              //creation des nom
              JLabel labelnom = new JLabel("Nom");
              JLabel labelprenom = new JLabel("Prenom");
              //creation des entrée texte
      
              nom.setColumns(10);
      
              prenom.setColumns(10);
              //creation des boutton
      
              //ajout des element
              champ.add(labelnom);
              champ.add(nom);
              champ.add(labelprenom);
              champ.add(prenom);
              boutton.add(logger);
              boutton.add(enregister);
              nom.addKeyListener(new KeyAdapter() {
                  // Ajoute d'un event pour les touches
                  public void keyReleased(KeyEvent e) {
                      verif();
                  }
              });
              // La même chose
              prenom.addKeyListener(new KeyAdapter() {
                  public void keyReleased(KeyEvent e) {
                      verif();
                  }
              });
      
              logger.addActionListener(new ActionListener() {
                  public void actionPerformed(ActionEvent e) {
                      if (verifText()) {
                          JOptionPane.showMessageDialog(null, "Vous vous êtes connecteez");
                      }
                  }
      
              });
              //Taille  et emplacement
              frame.setSize(300, 200);
              frame.setLocationRelativeTo(null);
      
              //Visibilité de la fenetre
              frame.setVisible(true);
          }
      
          // Deuxième solution plus conventionnel et le plus utilisé 
          public static boolean verifText() {
              if (nom.getText().equals("") || prenom.getText().equals("")) {
                  JOptionPane.showMessageDialog(null, "Veuillez remplir les zones de texte");
                  return false;
              } else {
                  return true;
              }
          }
      
          // Première solution
          public static void verif() {
              // Chaque fois qu'une lettre/chiffre/etc sera rentré dans le JTextField
              if (nom.getText().equals("") || prenom.getText().equals("")) {
                  // Rend inactif le bouton si nom est vide
                  logger.setEnabled(false);
              } else {
                  // Réactive le bouton sinon
                  logger.setEnabled(true);
              }
          }
      }

      En espérant t'avoir aidé :p

      • Partager sur Facebook
      • Partager sur Twitter
        12 décembre 2019 à 2:46:35

        Salut.

        Merci pour ton aide :)

        J'ai pas mal avancé. Mon problème actuellement est que les champ jtext ne se remplissent plus. J'ai bien mon événement qui agit sur mes boutons. Ça marche correctement comme attendu. malheureusement mon jtext reste vide mal-grès le fait que j'appuis sur les touche du clavier :)

        j'ai un message d'erreur dans eclipse qui n’empêche pas de compiler :

        Multiple markers at this line
        - The type Login must implement the inherited abstract method KeyListener.keyTyped(KeyEvent)

        - The type Login must implement the inherited abstract method KeyListener.keyPressed(KeyEvent)
        package com.tp30.nfa035;
        
        import java.awt.Color;
        import javax.swing.*;
        import java.awt.*;
        import java.awt.GridBagConstraints;
        import java.awt.GridBagLayout;
        import java.util.logging.Level;
        import java.util.logging.Logger;
        import javax.swing.JButton;
        import javax.swing.JComponent;
        import javax.swing.JFrame;
        import javax.swing.JLabel;
        import javax.swing.JPasswordField;
        import javax.swing.JTextField;
        import javax.swing.UIManager;
        import javax.swing.UnsupportedLookAndFeelException;
        import java.awt.event.*;
        
        
        public class Login extends JFrame implements KeyListener {
            private JFrame frame;
            private JButton btnLogin, btnRegister;
            private JTextField tfUsername;
            private JPasswordField tfPassword;
            private JLabel lblUsername, lblPassword;
            private GridBagLayout gbl;
            private GridBagConstraints gbc;
            private String title = "nfa035_TP_30_Login";
            private static int height       = 400;
            private static int left         = 1100;
            private static int top          = 140;
            private static int width        = 200;
            private static final long serialVersionUID = 1L;
         
            public Login() {
         
                frame = new JFrame(title);
                btnLogin = new JButton("Se loguer");
                btnRegister = new JButton("S'enregistrer");
                tfUsername = new JTextField(15);
                tfUsername.addKeyListener(this);
                tfPassword = new JPasswordField(15);
                tfPassword.addKeyListener(this);
                lblUsername = new JLabel("Nom");
                lblPassword = new JLabel("Mot de passe");
                gbc = new GridBagConstraints();
                gbl = new GridBagLayout();
         
                frame.setLayout(gbl);
                layoutComponents(0, 0, 1, 1, lblUsername, frame); 
                layoutComponents(0, 2, 1, 1, lblPassword, frame);
                layoutComponents(0, 1, 3, 1, tfUsername, frame);
                layoutComponents(0, 3, 3, 1, tfPassword, frame);
                layoutComponents(1, 4, 1, 1, btnLogin, frame);
                layoutComponents(2, 4, 1, 1, btnRegister, frame);
         
                frame.setSize( height, width);
                frame.setLocation(left, top);
                frame.getContentPane().setBackground(Color.LIGHT_GRAY);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         
                frame.setVisible(true);
                frame.setAlwaysOnTop(true);
                
        
        
            }
            
            public void keyReleased(KeyEvent event) {
            	Object source = event.getSource();
        	    if (source == tfUsername || source == tfPassword) {
        			if (tfUsername.getText().isEmpty() || tfPassword.getPassword().length==0) {
        				btnLogin.setEnabled(false);
        			}
        			else {
        				btnLogin.setEnabled(true);
        			}
        			
        			if (tfUsername.getText().isEmpty() && tfPassword.getPassword().length==0) {
        				btnLogin.setVisible(false);
        			}
        			else {
        				btnLogin.setVisible(true);
        			}
            	}
            }
         
            private void layoutComponents(int x, int y, int width, int height, JComponent addThis, JFrame addTo) {
                gbc.gridx = x;
                gbc.gridy = y;
                gbc.gridwidth = width;
                gbc.gridheight = height;
                gbc.fill = GridBagConstraints.HORIZONTAL;
                addTo.add(addThis, gbc);
            }
        
        }

        Edit : j'ai réussi ! Voila mon code final :

        package com.tp30.nfa035;
        
        import java.awt.Color;
        import javax.swing.*;
        import java.awt.*;
        import java.awt.GridBagConstraints;
        import java.awt.GridBagLayout;
        import java.util.logging.Level;
        import java.util.logging.Logger;
        import javax.swing.JButton;
        import javax.swing.JComponent;
        import javax.swing.JFrame;
        import javax.swing.JLabel;
        import javax.swing.JPasswordField;
        import javax.swing.JTextField;
        import javax.swing.UIManager;
        import javax.swing.UnsupportedLookAndFeelException;
        import java.awt.event.*;
        
        
        public class Login extends JFrame implements KeyListener {
            private JFrame frame;
            private JButton btnLogin, btnRegister;
            private JTextField tfUsername;
            private JPasswordField tfPassword;
            private JLabel lblUsername, lblPassword;
            private GridBagLayout gbl;
            private GridBagConstraints gbc;
            private String title = "nfa035_TP_30_Login";
            private static int height       = 400;
            private static int left         = 1100;
            private static int top          = 140;
            private static int width        = 200;
            private static final long serialVersionUID = 1L;
         
            public Login() {
         
                frame = new JFrame(title);
                btnLogin = new JButton("Se loguer");
                btnRegister = new JButton("S'enregistrer");
                tfUsername = new JTextField(15);
                tfUsername.addKeyListener(this);
                tfPassword = new JPasswordField(15);
                tfPassword.addKeyListener(this);
                lblUsername = new JLabel("Nom");
                lblPassword = new JLabel("Mot de passe");
                gbc = new GridBagConstraints();
                gbl = new GridBagLayout();
         
                frame.setLayout(gbl);
                layoutComponents(0, 0, 1, 1, lblUsername, frame); 
                layoutComponents(0, 2, 1, 1, lblPassword, frame);
                layoutComponents(0, 1, 3, 1, tfUsername, frame);
                layoutComponents(0, 3, 3, 1, tfPassword, frame);
                layoutComponents(1, 4, 1, 1, btnLogin, frame);
                layoutComponents(2, 4, 1, 1, btnRegister, frame);
         
                frame.setSize( height, width);
                frame.setLocation(left, top);
                frame.getContentPane().setBackground(Color.LIGHT_GRAY);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         
                frame.setVisible(true);
                frame.setAlwaysOnTop(true);
                
        
        
            }
            public void keyPressed(KeyEvent evt){}
        
            public void keyTyped(KeyEvent evt){}
            public void keyReleased(KeyEvent event) {
            	Object source = event.getSource();
        	    if (source == tfUsername || source == tfPassword) {
        			if (tfUsername.getText().isEmpty() || tfPassword.getPassword().length==0) {
        				btnLogin.setEnabled(false);
        			}
        			else {
        				btnLogin.setEnabled(true);
        			}
        			
        			if (tfUsername.getText().isEmpty() && tfPassword.getPassword().length==0) {
        				btnLogin.setVisible(false);
        			}
        			else {
        				btnLogin.setVisible(true);
        			}
            	}
            }
         
            private void layoutComponents(int x, int y, int width, int height, JComponent addThis, JFrame addTo) {
                gbc.gridx = x;
                gbc.gridy = y;
                gbc.gridwidth = width;
                gbc.gridheight = height;
                gbc.fill = GridBagConstraints.HORIZONTAL;
                addTo.add(addThis, gbc);
            }
        
        }



        -
        Edité par -Crixus- 12 décembre 2019 à 2:52:26

        • Partager sur Facebook
        • Partager sur Twitter

        "Etre vrai, peu le peuvent."
        Friedrich Nietzsche

        Listener sur jtextfield

        × 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