package src.View; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.IOException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.SwingConstants; import src.Controller.*; import src.Protocoles.*; /* * Classe represenyant la fenetre d'accueil pour la connexion d'un utilisateur. */ public class View_Accueil implements ActionListener{ JFrame frame; JPanel panel; JTextField pseudofield; JLabel Text; 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 View_Accueil () { //creer une instance JFrame frame = new JFrame("ChatApp-AL-NM"); //sortir quand l’utilisateur ferme le frame frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // fixer les dimensions de la fenetre frame.setSize(new Dimension(120, 40)); //Creer le JPanel panel = new JPanel(new GridLayout(3,1)); //Ajouter les elements this.addWidgets(); //Set the default button. frame.getRootPane().setDefaultButton(Connexion); //Ajouter le panel a la window frame.getContentPane().add(panel, BorderLayout.CENTER); //L'utilisateur ne pourra pas aggrandir la fenetre this.frame.setResizable(false); //Afficher la fenetre frame.pack(); frame.setVisible(true); } /** * Creer et ajouter les outils de la fenetre */ private void addWidgets() { // Créer Zone d'insertion de texte pour le pseudo this.pseudofield = new JTextField(2); // creation d'un label qui contiendra un txt au centre this.Text = new JLabel("Bonjour, Entrez un nom d'utilisateur!", SwingConstants.CENTER); //Ajout d'un bouton Connexion this.Connexion = new JButton("Connexion"); //On associe au bouton Connexion des actions a realiser this.Connexion.addActionListener(this); // On ajouter les differents elements au panel panel.add(pseudofield); panel.add(Text); panel.add(Connexion); //ajouter un effet de bord transparent au composant Jlabel Text.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); } /* * Definir des traitements en réponse à un clic sur le bouton connexion * @param event Un clic sur le bouton connexion */ public void actionPerformed(ActionEvent event) { // on recupere le texte entree dans la zone de saisie String pseudo = pseudofield.getText(); // On crée un objet de type ChatApp ChatApp app = new ChatApp(pseudo, 3000) ; // on crée un thread qui va ecouter les connexions entrantes ExecutorService execUDP = Executors.newFixedThreadPool(1000); execUDP.submit(new RunnerEcouteUDP(app)); Boolean connexion = false ; try { // on tente une connexion avec ce pseudo connexion = app.connexion(); } catch (IOException e) { e.printStackTrace(); } // 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 View_Menu fenetreCourante= new View_Menu(app); } else { // La connexion a echoue, il est possible de rentrer un nouveau pseudo JOptionPane.showMessageDialog(frame, "Echec de Connexion , ce pseudo est deja pris !"); } } private static void createAndShowGUI() { // Etre certain d'avoir une joli fenetre JFrame.setDefaultLookAndFeelDecorated(true); // On crée une fentre d'acceuil View_Accueil fenetre = new View_Accueil(); } public static void main(String[] args) { //Schedule a job for the event-dispatching thread: //creating and showing this application's GUI. javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } }