package gui; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.SwingConstants; import javax.swing.UIManager; import javax.swing.JOptionPane; import java.io.File; import java.io.IOException; import controller.*; import network.Tools; import test.App; public class FenetreInscription implements ActionListener { JFrame frame; JPanel panel; JTextField loginfield; JTextField pseudofield; JLabel Text; JButton inscription; JButton connexion; /* * Constructeur d'une fenetre d'affichage pour la connexion d'un utilisateur. * Cette fenetre sera munie d'un bouton de connexion et d'une zone de saisie de pseudo. */ public FenetreInscription() { try { UIManager.setLookAndFeel("com.jtattoo.plaf.noire.NoireLookAndFeel"); } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(FenetreMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(FenetreMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(FenetreMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(FenetreMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //creer une instance JFrame frame = new JFrame("Fenetre inscription"); //sortir quand l’utilisateur ferme le frame frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // fixer les dimensions de la fenetre frame.setSize(new Dimension(40, 100)); //Creer le JPanel panel = new JPanel(new GridLayout(7,1)); panel.setOpaque(false); //Ajouter les elements this.addWidgets(); try { final Image backgroundImage = javax.imageio.ImageIO.read(new File("b1.jpg")); frame.setContentPane(new JPanel(new BorderLayout()) { @Override public void paintComponent(Graphics g) { g.drawImage(backgroundImage, 0, 0, null); } }); } catch (IOException e) { throw new RuntimeException(e); } frame.getRootPane().setDefaultButton(inscription); //Ajouter le panel a la window frame.getContentPane().add(panel, BorderLayout.CENTER); //L'utilisateur ne pourra pas agrandir la fenetre this.frame.setResizable(false); //Afficher la fenetre frame.pack(); frame.setVisible(true); } private void addWidgets() { // Créer Zone d'insertion de texte pour le pseudo this.loginfield = new JTextField(2); this.pseudofield = new JTextField(2); // creation d'un label qui contiendra un txt au centre this.Text = new JLabel("Forbidden characters: space, '?','&', '/', '=' ", SwingConstants.CENTER); this.Text.setForeground(Color.WHITE); this.Text.setOpaque(false); JLabel text = new JLabel("Login: ", SwingConstants.CENTER); text.setForeground(Color.WHITE); text.setOpaque(false); loginfield.addKeyListener(new KeyAdapter() { public void keyTyped(KeyEvent e) { if(e.getKeyChar() =='?' || e.getKeyChar() == '&' || e.getKeyChar() == '/' || e.getKeyChar() =='=' || e.getKeyChar() == KeyEvent.VK_SPACE) { e.consume(); } } }); pseudofield.addKeyListener(new KeyAdapter() { @Override public void keyTyped(KeyEvent e) { if(e.getKeyChar() =='?' || e.getKeyChar() == '&' || e.getKeyChar() == '/' || e.getKeyChar() =='=' ||e.getKeyChar() == KeyEvent.VK_SPACE ) { e.consume(); } } }); JLabel text2 = new JLabel("Pseudo: ", SwingConstants.CENTER); text2.setForeground(Color.WHITE); text2.setOpaque(false); //Ajout d'un bouton Connexion this.inscription = new JButton("Sign Up"); this.connexion = new JButton("Sign In"); //On associe au bouton Connexion des actions a realiser this.inscription.addActionListener(this); this.connexion.addActionListener(this); // On ajouter les differents elements au panel panel.add(text); panel.add(loginfield); panel.add(text2); panel.add(pseudofield); panel.add(Text); panel.add(inscription); panel.add(connexion); //ajouter un effet de bord transparent au composant Jlabel Text.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); } public void actionPerformed(ActionEvent event) { Object source = event.getSource(); if(source == inscription) { // on recupere le login et le pseudo entrés dans la zone de saisie String login = loginfield.getText(); String pseudo = pseudofield.getText(); //Si le login ou le pseudo sont vides affichage message d'erreur if(login.isBlank()||pseudo.isBlank()) { JOptionPane.showMessageDialog(frame, "Please do not enter a blank pseudo or login") ; //Si le login existe déjà on affiche un message d'erreur }else if(DataBase.getInstance().loginExiste(login)){ JOptionPane.showMessageDialog(frame, "This login is already used"); //Les conditions sont réunies }else { Agent agent; boolean connexion; try { //Création d'un agent agent = new Agent(Tools.getAdress()[0], App.portSrc, App.portDest); // on tente une connexion avec le pseudo connexion = agent.connectInscription(pseudo, login); // Dans les deux cas de figures (reussite ou echec) on affiche un pop-up pour expliquer la situation if(connexion) { // La connexion a reussi JOptionPane.showMessageDialog(frame, "Bonjour " + pseudo) ; frame.dispose(); // on lance une nouvelle fenetre de type View_Menu FenetreMenu fenetreCourante= new FenetreMenu(agent); }else { // La connexion a echoue, il est possible de rentrer un nouveau pseudo JOptionPane.showMessageDialog(frame, "Echec de Connexion , ce pseudo est deja pris !"); } } catch (IOException e) { System.out.println("Création thread impossible"); e.printStackTrace(); } catch (InterruptedException e) { System.out.println("connect impossible"); e.printStackTrace(); } } }else if(source == connexion){ frame.dispose(); FenetreConnexion fenetreCo = new FenetreConnexion(); } } public static void createAndShowGUI() { // Etre certain d'avoir une joli fenetre JFrame.setDefaultLookAndFeelDecorated(true); // On crée une fentre d'acceuil FenetreInscription fenetre = new FenetreInscription(); } public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } }