Partage
  • Partager sur Facebook
  • Partager sur Twitter

java utiliser le HashMap d'une classe à l'autre

Sujet résolu
    20 juin 2021 à 11:58:59

    bonjour,j'aimerais utiliser ma variable login info dans ma classe login sachant que login info est une HashMap et qu'elle est située dans la classe ID

    Classe login :

    package registerlogin;
    
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.HashMap;
    
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JPasswordField;
    import javax.swing.JTextField;
    
    public class login implements ActionListener{
    
    	public static void main(String[] args) {
    		
    		
    		
    		JFrame f = new JFrame("Register Login");
    		
    		Color cyan = new Color(50,147,168);
    		Color buttoncolor = new Color(184, 237, 242);
    		
    		JPanel p = new JPanel();
    		p.setBackground(cyan);
    		
    		JLabel id = new JLabel("<html> <font color = #b8edf2> your Name : </font><html>");
    		id.setBounds(50,100,100,25);
    		
    		JLabel password = new JLabel("<html> <font color = #b8edf2> your Password : </font><html>");
    		password.setBounds(50,150,100,25);
    		
    		JLabel bv = new JLabel("Bienvenue !");
    		bv.setFont(new Font("Serif", Font.BOLD, 30));
    		bv.setBounds(50,35,150,25);
    		
    		JLabel oui = new JLabel("oui");
    		oui.setBounds(350,190,100,50);
    		
    		
    		JTextField idJT = new JTextField();
    		idJT.setBounds(150,100,150,25);
    		
    		JPasswordField passwordJT = new JPasswordField();
    		passwordJT.setBounds(150,150,150,25);
    		
    		JButton clean = new JButton("<html> <font color = #3293a8> Clean </font><html>");
    		clean.setBounds(325,115,150,50);
    		clean.setFocusable(false);
    		clean.setBackground(buttoncolor);
    		//clean.addActionListener(this);
    		
    		JButton login = new JButton("<html> <font color = #3293a8> Login </font><html>");
    		login.setBounds(150,200,150,35);
    		login.setFocusable(false);
    		login.setBackground(buttoncolor);
    		
    		JButton register = new JButton("<html> <font color = #3293a8> register </font><html>");
    		register.setBounds(250,35,150,35);
    		register.setFocusable(false);
    		register.setBackground(buttoncolor);
    		
    		f.setContentPane(p);
    		p.add(id);
    		p.add(password);
    		p.add(bv);
    		p.add(idJT);
    		p.add(passwordJT);
    		p.add(clean);
    		p.add(login);
    		p.add(register);
    		p.add(oui);
    		
    		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		f.setSize(550,300);
    		f.setLayout(null);
    		f.setVisible(true);
    		f.setLocationRelativeTo(null);
    		f.setIconImage(new ImageIcon("src/images/logineclipse.png").getImage());
    		
    		
    		
    		clean.addActionListener(new ActionListener() {
    
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				idJT.setText("");
    				passwordJT.setText("");
    		login.addActionListener(new ActionListener() {
    
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				String userID = idJT.getText();
    				String password = String.valueOf(passwordJT.getPassword());
    				
    				
    			}
    			
    		});
    			
    							
    						}
    					});
    					
    				}
    
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		// TODO Auto-generated method stub
    		
    	}
    			}

    Dans la classe ID :

    package registerlogin;
    
    import java.util.HashMap;
    
    public class ID {
    
    	HashMap<String,String> logininfo = new HashMap<String,String>();
    	
    	ID(){
    		
    		logininfo.put("admin","test");
    	}
    		@SuppressWarnings("rawtypes")
    		protected HashMap getlogininfo() {
    			return logininfo;
    		}
    	
    }

    Dans la classe Main :

    package registerlogin;
    
    
    
    public class Main {
    
    	@SuppressWarnings("unused")
    	public static void main(String[] args) {
    		
    		ID ID = new ID();
    		
    		login login = new login(ID.getlogininfo());
    		
    
    	}
    
    }


    Merci de vos réponses !

    en fait je veut utiliser le JButton login pour verifier si ce que la personne met dans le idJT correspond au logininfo et de meme pour passwordJT

    j'imaginais plus tard ajouter ce code pour cela :

    if(logininfo.containsKey(userID)) {
    				if(logininfo.get(userID).equals(password)) {
    					messagelabel.setForeground(Color.green);
    					messagelabel.setText("login successful");

    mais je suis completement bloqué 



    • Partager sur Facebook
    • Partager sur Twitter
      20 juin 2021 à 15:21:29

      Vu que tu passes la HashMap via constructeur, tu pourrais l'enregistrer dans une member variable au sein de la classe login quand tu instancies celle-ci :

      public class login implements ActionListener{
          Map<String, String> loginInfo;
      
          public login(Map<String, String> loginInfo) {
              this.loginInfo = loginInfo;
          }
          //...


      Puis tu ajoutes un listener pour le bouton de login, similaire à celui du clean, sauf qu'à l'intérieur de son actionPerformed tu mets ton code de vérification du login.

      • Partager sur Facebook
      • Partager sur Twitter
        20 juin 2021 à 20:40:23

        Passer des collections mutables en getter c'est la porte ouverte aux side-effects, tout objet l'utilisant peut potentiellement en modifier le contenu, et c'est la foire aux bugs.

        Il vaut mieux garder la map encapsulée, exposer une méthode dans ID (qui devrait s'appeler Id si on suit les conventions de nommage java), laquelle fera la vérif si le login/pass est ok.

        • Partager sur Facebook
        • Partager sur Twitter
          21 juin 2021 à 0:49:03

          Bien vu, en plus comme ça on gardera la logique du login hors de la logique de l'UI et ce sera plus facile à tester.
          • Partager sur Facebook
          • Partager sur Twitter
            22 juin 2021 à 13:23:10

            bonjour, j'ai essayé de faire ce que m'a dit Scroph donc j'ai cré une zone de test pour tester donc mon ZoneDeTest serais mon login

            et mon test1 serais mon ID doinc logiquement quand j'execute ca devrais afficher : "{admin1=test, admin2=test, admin=test}" ou quelque chose comme ça mais je ne comprend pas car ça m'affiche ca :"{admin1=test, admin2=test}"

            ZoneDeTest :

            package fr.zonedetest;
            
            import java.awt.event.ActionEvent;
            import java.awt.event.ActionListener;
            import java.util.Map;
            
            public class ZoneDeTest implements ActionListener {
            	Map<String, String> logininfo;
            	
            	public  ZoneDeTest(Map<String,String> logininfo) {
            		this.logininfo = logininfo;
            	}
            	
            
            	public static void main(String[] args) {
            	
            		test1.logininfo.put("admin1", "test");
            		test1.logininfo.put("admin2", "test");
            		
            		
            	System.out.println(test1.logininfo);
            
            }
            
            
            	
            
            
            }

            mon test1 :

            package fr.zonedetest;
            
            import java.util.HashMap;
            
            public class test1 {
            
            public static HashMap<String,String> logininfo = new HashMap<String,String>();
            	
             test1(){
            		
            		logininfo.put("admin","test");
            	}
            		@SuppressWarnings("rawtypes")
            		protected HashMap getlogininfo() {
            			return logininfo;
            		}
            		
            		
            		
            }

            et mon code de verification du login resemblerais a ça 

            login.addActionListener(new ActionListener() {
            			@Override
            			public void actionPerformed(ActionEvent e) {
            				String userID = idJT.getText();
            				String password = String.valueOf(passwordJT.getPassword());
            				
            				if(ID.logininfo.containsKey(userID)) {
            					
            					if(ID.logininfo.get(userID).equals(password)) {
            						oui.setForeground(Color.green);
            						oui.setText("connection ...");
            					
            				}
            				else {
            					
            					oui.setText("Mauvais mot de passe");
            					oui.setForeground(Color.red);
            				}
            			}
            				else {
            					oui.setText("mauvais id");
            					oui.setForeground(Color.red);
            					System.out.println(userID);
            					System.out.println(password);
            					
            					System.out.println(ID.logininfo);
            					
            				}





            -
            Edité par BriocheOchoco 22 juin 2021 à 13:26:04

            • Partager sur Facebook
            • Partager sur Twitter
              22 juin 2021 à 16:31:57

              Pourquoi ne respectes tu pas les principes d'encapsulation?
              • Partager sur Facebook
              • Partager sur Twitter
                22 juin 2021 à 16:51:51

                je suis désolé je ne connais pas ce principe en me renseignant je vois que c'est de mettre des parenthèses autour d'un string mais je ne vois pas a quoi ça sert

                • Partager sur Facebook
                • Partager sur Twitter
                  23 juin 2021 à 0:01:24

                  L'encapsulation est l'un des principes majeurs de l'orienté objet, il consiste à masquer le contenu des objets de manière à garder le contrôle de ce contenu au sein de l'objet.

                  Idéalement, pour avoir un cheminement serein tu devrais commencer par suivre un cours de base sur le langage java, en te concentrant sur les applications en console.

                  Ensuite, te familiariser avec les concepts et bonnes pratiques de l'orienté objet.

                  Ensuite pratiquer pour t'entrainer.

                  Et enfin seulement, une fois à l'aise, te lancer dans la programmation fenêtrée.

                  Ce cours est assez bien fait: https://www.jmdoudoux.fr/accueil_java.htm 

                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 juin 2021 à 10:09:15

                    Non je ne vois pas comment appeler une variable d'une classe a l'autre je suis peut etre un peut con donc je ne vois pas ça dans ton cours mais svp quelqu'un peut au moins me donner un exemple simple par exemple  de comment appeler une une variable int chiffre = 12;

                    dans une autre classe ou un autre package merci a vous

                    • Partager sur Facebook
                    • Partager sur Twitter
                      26 juin 2021 à 18:36:39

                      tu n'es certainement pas con, par contre tu as juste cherché dans le cours une partie qui t'intéresse, à la différence d'un tutoriel, qui répond à un besoin précis, un cours se veut complet et doit être suivi comme tel, du début à la fin.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 juin 2021 à 11:08:41

                        c'est bon merci j'ai trouvé dans le cours ce que je voulais
                        • Partager sur Facebook
                        • Partager sur Twitter

                        java utiliser le HashMap d'une classe à l'autre

                        × 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