228 rindas
7,7 KiB
Java
228 rindas
7,7 KiB
Java
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<43>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<74>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<EFBFBD> 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<43>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<EFBFBD>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<63>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();
|
||
}
|
||
});
|
||
}
|
||
}
|