Projet_COO_POO/Projet Eclipse/chatGit/src/gui/FenetreModifPseudo.java
2021-02-13 14:32:51 +01:00

144 行
4 KiB
Java

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();
}
}
}
}