package gui; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.HeadlessException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; 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.JOptionPane; import java.io.IOException; import controller.*; public class FenetreModifPseudo implements ActionListener { JFrame frame; JPanel panel; JTextField pseudofield; JLabel Text; JButton ok; JButton Cancel; Agent agent; /* * 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 FenetreModifPseudo(Agent agent) { this.agent = agent; //creer une instance JFrame frame = new JFrame("Modification pseudo"); //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(4,1)); //Ajouter les elements this.addWidgets(); //Set the default button. frame.getRootPane().setDefaultButton(ok); //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); } 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("Type your new pseudo", SwingConstants.CENTER); //Ajout d'un bouton Connexion this.ok = new JButton("Continue"); this.Cancel = new JButton("Cancel"); this.ok.addActionListener(this); this.ok.setSelected(false); this.Cancel.addActionListener(this); //On associe au bouton Connexion des actions a realiser this.ok.addActionListener(this); // On ajoute les differents elements au panel panel.add(pseudofield); panel.add(Text); panel.add(ok); panel.add(Cancel); //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 == ok){ //Récupération du nouveau pseudo String newPseudo = pseudofield.getText(); try { //Si le nouveau pseudo est acceptable if(agent.changerPseudo(newPseudo)) { //Affichage message JOptionPane.showMessageDialog(frame, "Your new pseudo is "+newPseudo); frame.dispose(); new FenetreMenu(agent); //Sinon affichage message erreur }else { if(!ok.isSelected() && !FenetreMenu.ouvert) { try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } JOptionPane.showMessageDialog(frame, "Pseudo already use, choose another one"); ok.setSelected(true); frame.dispose(); new FenetreModifPseudo(agent); } } } catch (HeadlessException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); }; }else if(source == Cancel) { frame.dispose(); try { new FenetreMenu(agent); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }