From 844ddcdc4d790b96a42529fdb70ad5ff37defa38 Mon Sep 17 00:00:00 2001 From: tgiraud Date: Wed, 9 Dec 2020 09:42:54 +0100 Subject: [PATCH] JOption pane pcq Swing c'est dur + jolis

--- Application/Clavardage/src/User.java | 170 +++++++++++++++------------ 1 file changed, 92 insertions(+), 78 deletions(-) diff --git a/Application/Clavardage/src/User.java b/Application/Clavardage/src/User.java index 54df13f..412451a 100644 --- a/Application/Clavardage/src/User.java +++ b/Application/Clavardage/src/User.java @@ -1,3 +1,8 @@ +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -6,7 +11,8 @@ import java.net.*; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; -import java.util.Scanner; // Import the Scanner class +import javax.swing.JOptionPane; + import java.util.ArrayList; // import the ArrayList class @@ -30,22 +36,25 @@ public class User{ protected UserListeningThreadUDP threadListeningUDP; // UDP listening thread (pour répondre aux nouveaux utilisateurs) protected UserListeningThreadTCP threadListeningTCP; // TCP listening thread (pour commencer une nouvelle conversation) - /* Constructor of User (local) + /** + * Constructor of User (local) * $parametres * * portUDPsend : int => le numéro de port pour envoyé ces informations lors d'un changements ou d'une nouvelle connexion * * portUDPlistening : int => le numéro de port pour recevoir les informations des nouveaux utilisateurs ou les changements * * portTCP : int => le numéro de port pour commencer une nouvelle conversation - * - * $description : On récupère l'adresse de la machine, le numéro de port à utiliser, on demande un pseudo à l'utilisateur + *

+ * On récupère l'adresse de la machine, le numéro de port à utiliser, on demande un pseudo à l'utilisateur * que l'on vérifie, une fois validé, l'utilisateur devient actif (Début de l'écoute UDP pour les pseudos et notification aux autres utilisateurs actifs) + *

*/ + public User(int portUDPsend,int portUDPlistening,int portTCP) throws IOException{ try { this.addIP = InetAddress.getLocalHost(); } catch(UnknownHostException e) { - System.out.println("Could not find local address!"); + JOptionPane.showMessageDialog(null ,"Could not find local address!"); } this.portUDPsend = portUDPsend; @@ -55,18 +64,20 @@ public class User{ this.initPseudo(); this.active(); - } - /* + + /** * Constructor of User (simulation of remote user) * $parametres * * portUDPsend : int => le numéro de port pour envoyé ces informations lors d'un changements ou d'une nouvelle connexion * * portUDPlistening : int => le numéro de port pour recevoir les informations des nouveaux utilisateurs ou les changements * * portTCP : int => le numéro de port pour commencer une nouvelle conversation * * pseudo : String => le pseudo avec lequel on initie l'utilisateur distant (! pas de vérification) - * - * $description : On récupère l'adresse de la machine, le numéro de port à utiliser, on demande un pseudo à l'utilisateur - * que l'on vérifie, une fois validé, l'utilisateur devient actif (Début de l'écoute UDP pour les pseudos et notification aux autres utilisateurs actifs) + *

+ * On récupère l'adresse de la machine, le numéro de port à utiliser, on demande un pseudo à l'utilisateur + * que l'on vérifie, une fois validé, l'utilisateur devient actif (Début de l'écoute UDP pour les pseudos + * et notification aux autres utilisateurs actifs) + *

*/ public User(int portUDPsend,int portUDPlistening, int portTCP,String pseudo) { try @@ -74,7 +85,7 @@ public class User{ this.addIP = InetAddress.getLocalHost(); } catch(UnknownHostException e) { - System.out.println("Could not find local address!"); + JOptionPane.showMessageDialog(null ,"Could not find local address!"); } this.portUDPsend = portUDPsend; this.portUDPlistening = portUDPlistening; @@ -119,58 +130,51 @@ public class User{ public void setPortUDPsend(int portUDPsend) { this.portUDPsend = portUDPsend; } - /*setPseudo - * $description - * Demande à l'utilisateur de rentrer un pseudo et validation de ce dernier en demandant aux utilisateurs distants leurs informations + + /** + *

+ * Demande à l'utilisateur de rentrer un pseudo et valide de ce dernier en demandant aux + * utilisateurs distants leurs informations. * On regarde si le pseudo est bien différent de l'ancien + *

*/ - - - private void setPseudo() throws IOException { String oldPseudo = this.pseudo; //Saves the old one for comparison - Scanner sc3 = new Scanner(System.in); // Create a Scanner object - System.out.println("Enter new nickname :"); - String tmpPseudo = sc3.nextLine(); // Read user input + String tmpPseudo = JOptionPane.showInputDialog(null, "Enter nickname:"); // Read user input while(!(this.validatePseudo(tmpPseudo)) || tmpPseudo.equals(oldPseudo)) { - System.out.println("Already exist, enter another nickname :"); - tmpPseudo = sc3.nextLine(); // Read user input + tmpPseudo = JOptionPane.showInputDialog(null, "Already exist, enter another nickname :"); // Read user input } this.pseudo = tmpPseudo; //myObj.close(); - System.out.println("Your new nickname : " + tmpPseudo + " is valid !"); + JOptionPane.showMessageDialog(null ,"Your new nickname : " + tmpPseudo + " is valid !"); notify_remote_user(); } - - - /*** PROCEDURES ***/ - - /*initPseudo - * $description - * Demande à l'utilisateur de rentrer un pseudo et validation de ce dernier en demandant aux utilisateurs distants leurs informations + /** + *

+ * Demande à l'utilisateur de rentrer un pseudo et valide de ce dernier en demandant aux + * utilisateurs distants leurs informations + *

*/ public void initPseudo() throws IOException { - Scanner sc1 = new Scanner(System.in); // Create a Scanner object - System.out.println("Enter nickname :"); - String tmpPseudo = sc1.nextLine(); // Read user input + String tmpPseudo = JOptionPane.showInputDialog(null, "Enter nickname:"); // Read user input while(!(this.validatePseudo(tmpPseudo))) { // On demande aux autres utilisateurs de nous envoyer leurs informations et on test si le pseudo est déjà utilisé - System.out.println("Enter another nickname :"); - tmpPseudo = sc1.nextLine(); // Read user input + tmpPseudo = JOptionPane.showInputDialog(null, "Enter another nickname:"); // Read user input } this.pseudo = tmpPseudo; //sc1.close(); - System.out.println("Your nickname : " + tmpPseudo + " is valid !"); + JOptionPane.showMessageDialog(null ,"Your nickname : " + tmpPseudo + " is valid !"); } public void TCPmessage(int index) throws IOException { Socket link=null; + String s1; try { link=new Socket(this.userChatList.get(index).addIP,this.userChatList.get(index).portTCP); @@ -194,7 +198,7 @@ public class User{ e.printStackTrace(); } String input; - System.out.println(this.getPseudo()+" reçoit un message"); + String s2 = (this.getPseudo()+" reçoit un message"); try { while (!(input=in.readLine()).equals("end")) { System.out.print("client_recoit:"+input); @@ -217,14 +221,18 @@ public class User{ } - /* validatePseudo - * $parametres + /** + *

* *tmpPseudo : String => Le pseudo à valider - * $description - * On envoi en broadcast (pour l'instant envoi sur les ports de notre ordinateur) d'une demande d'information - * On attends les réponses pendant 5 secondes + *

+ * Envoi en broadcast (pour l'instant envoi sur les ports de notre ordinateur) d'une demande d'information + *

+ * On attend les réponses pendant 5 secondes + *

* On valide le pseudo en fonction des pseudos reçu - * On en profites pour ajouter les utilisateurs répondant à notre liste d'utilisateur distant (RemoteUser) + *

+ * On en profite pour ajouter les utilisateurs répondant à notre liste d'utilisateur distant (RemoteUser) + *

*/ public Boolean validatePseudo(String tmpPseudo) throws IOException { @@ -279,10 +287,10 @@ public class User{ tabresponse = response.split(":"); // Affichage de la réponse - System.out.println("Remote user n°"+nbReponse); - System.out.println("\tIP : "+tabresponse[0]); - System.out.println("\tn°Port : "+tabresponse[1]); - System.out.println("\tpseudo : "+tabresponse[2]); + System.out.println("Remote user n°"+nbReponse+ + "\nIP : "+tabresponse[0]+ + "\nn°Port : "+tabresponse[1]+ + "\npseudo : "+tabresponse[2]); // Si reception on ajoute l'utilisateur à notre liste d'utilisateur distant this.addRemoteUser(InetAddress.getByName(tabresponse[0].split("/")[1]),Integer.parseInt(tabresponse[1]),tabresponse[2]); @@ -295,19 +303,22 @@ public class User{ dgramSocket.close(); if(!valid) { - System.out.println("Nickname : "+tmpPseudo +" is taken !"); + JOptionPane.showMessageDialog(null ,"Nickname : "+tmpPseudo +" is taken !"); } return valid; } - /*addRemoteUser - * $parametres + /** + *

* *remoteUserIP : InetAddress => l'adresse IP de l'utilisateur distant + *

* *remoteUserPortTCP : int => le numéro de port TCP d'écoute de l'utilisateur distant + *

* *remoteUserPseudo : String => le pseudo de l'utilisateur distant - * $description - * On ajoute ou mise à jour l'utilisateur distant dans notre liste d'utilisateur distant + *

+ * Ajout ou mise à jour l'utilisateur distant dans notre liste d'utilisateur distant + *

*/ public void addRemoteUser(InetAddress remoteUserIP, int remoteUserPortTCP,String remoteUserPseudo) { RemoteUser tmpRemoteUser = new RemoteUser(remoteUserIP,remoteUserPortTCP,remoteUserPseudo); @@ -322,9 +333,10 @@ public class User{ } } - /* notify_remote_user - * $description - * En utilisant le port UDP d'envoi, on envoi en broadcast les informations nous concernant + /** + *

+ * En utilisant le port UDP d'envoi, on envoie en broadcast les informations nous concernant + *

*/ public void notify_remote_user() { // Création du socket d'envoi d'information @@ -364,11 +376,14 @@ public class User{ dgramSocket.close(); } - /*active - * $ description - * On démarre un thread d'écoute UDP pour répondre au nouveaux utilisateurs - * On démarre un thread d'écoute TCP pour commencer une conversation avec les utilisateurs actifs - * On notifie les utilisateurs distants actifs de notre passage en mode actif (envoi de nos informations) + /** + *

+ * On démarre un thread d'écoute UDP pour répondre au nouveaux utilisateurs, + *

+ * On démarre un thread d'écoute TCP pour commencer une conversation avec les utilisateurs actifs, + *

+ * On notifie les utilisateurs distants actifs de notre passage en mode actif (envoi de nos informations) + *

*/ private void active() { this.threadListeningUDP = new UserListeningThreadUDP("UDP Listening thread",this); @@ -382,47 +397,46 @@ public class User{ this.actif=true; } - /*printRemoteUserList - * $descrition - * Affichage de la liste d'utilisateur actif avec leurs index dans la liste + /** + *

+ * Affichage de la liste d'utilisateurs actifs avec leurs index dans la liste + *

*/ public void printRemoteUserList() { - System.out.println("\nInternal list of active remote users:"); - + System.out.println("Internal list of active remote users:"); + for(int i=0; i + * Laisse l'utilisateur choisir parmis la liste d'utilisateurs actifs celui avec lequel il souhaite échanger via un chat + *

*/ public void getOneActiveUser() throws IOException { this.printRemoteUserList(); - Scanner sc2= new Scanner(System.in); - System.out.println("Please, enter index of one active user that you saw on the list to start a conversation with:"); - int index=Integer.parseInt(sc2.nextLine()); + int index=Integer.parseInt(JOptionPane.showInputDialog(null, "Please, enter index of one active user that you saw on the list to start a conversation with:")); if (index >= 0 && index