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

228 rindas
7,7 KiB
Java
Neapstrādāts Vainot Vēsture

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