mirror of
https://github.com/LucasVbr/mini-chat.git
synced 2026-05-14 09:06:49 +00:00
167 lines
4.6 KiB
Java
167 lines
4.6 KiB
Java
/*
|
|
* FenetreClient.java, 06/12/2022
|
|
* INU Champollion, 2022-2023
|
|
* pas de copyright, aucun droits
|
|
*/
|
|
|
|
package ui;
|
|
|
|
import client.Client;
|
|
|
|
import javax.swing.*;
|
|
import java.awt.*;
|
|
import java.awt.event.KeyAdapter;
|
|
import java.awt.event.KeyEvent;
|
|
import java.awt.event.WindowAdapter;
|
|
import java.awt.event.WindowEvent;
|
|
import java.io.IOException;
|
|
import java.util.Objects;
|
|
|
|
/**
|
|
* Interface du client
|
|
*
|
|
* @author Gaël Burguès
|
|
* @author Laurian Dufrechou
|
|
* @author Lucàs Vabre
|
|
*/
|
|
public class FenetreClient extends JFrame {
|
|
private JTextField addressInput, portInput, pseudoInput, messageInput;
|
|
private JButton connexionButton, envoyerButton, deconnexionButton;
|
|
private JPanel mainPanel;
|
|
private JTextArea chatArea;
|
|
private JScrollPane scrollPane;
|
|
|
|
/**
|
|
* Le client lié à cette fenêtre
|
|
*/
|
|
private Client client;
|
|
|
|
/**
|
|
* Crée une nouvelle fenêtre client
|
|
*/
|
|
public FenetreClient() {
|
|
super("Fenêtre client");
|
|
add(mainPanel);
|
|
|
|
// Configure le tchat
|
|
chatArea.setEnabled(false);
|
|
chatArea.setLineWrap(true);
|
|
chatArea.setDisabledTextColor(Color.BLACK);
|
|
|
|
// Au lancement, on ne peut pas envoyer de message sans être connecté au serveur
|
|
messageInput.setEnabled(false);
|
|
envoyerButton.setEnabled(false);
|
|
|
|
// Action des boutons
|
|
messageInput.addKeyListener(new KeyAdapter() {
|
|
@Override
|
|
public void keyPressed(KeyEvent e) {
|
|
if (e.getKeyCode() == KeyEvent.VK_ENTER) envoyerMessage();
|
|
}
|
|
});
|
|
connexionButton.addActionListener(e -> connexion());
|
|
envoyerButton.addActionListener(e -> envoyerMessage());
|
|
deconnexionButton.addActionListener(e -> deconnexion());
|
|
|
|
// Quand on clique sur fermer la fenêtre, on ferme la connexion.
|
|
this.addWindowListener(new WindowAdapter() {
|
|
public void windowClosing(WindowEvent e) {
|
|
deconnexion();
|
|
}
|
|
});
|
|
|
|
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
this.setSize(400, 250);
|
|
this.setVisible(true);
|
|
}
|
|
|
|
/**
|
|
* Récupère la saisie de l'utilisateur et l'envoie au serveur
|
|
*/
|
|
private void envoyerMessage() {
|
|
{
|
|
String message = this.messageInput.getText();
|
|
|
|
try {
|
|
if (Objects.equals(message, "bye")) deconnexion();
|
|
else this.client.sendMessage(message);
|
|
|
|
this.messageInput.setText("");
|
|
} catch (IOException ex) {
|
|
throw new RuntimeException(ex);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Crée un client et le connecte au serveur à partir de l'IP et port du serveur avec le pseudo du client.
|
|
*/
|
|
public void connexion() {
|
|
String address = addressInput.getText();
|
|
int port = Integer.parseInt(portInput.getText());
|
|
String pseudo = pseudoInput.getText();
|
|
|
|
if (Objects.equals(pseudo.strip(), "")) {
|
|
new FenetreErreur("Pseudo vide !", this);
|
|
this.pseudoInput.setText("");
|
|
return;
|
|
}
|
|
|
|
this.client = new Client(address, port, pseudo, this);
|
|
this.client.start();
|
|
|
|
// Désactive le formulaire de connexion
|
|
addressInput.setEnabled(false);
|
|
portInput.setEnabled(false);
|
|
pseudoInput.setEnabled(false);
|
|
|
|
// Active l'interface de tchat
|
|
messageInput.setEnabled(true);
|
|
envoyerButton.setEnabled(true);
|
|
}
|
|
|
|
/**
|
|
* Déconnecte le client du serveur
|
|
*/
|
|
public void deconnexion() {
|
|
if (client == null) return;
|
|
|
|
// Déconnecte le client
|
|
this.client.addMessage("bye");
|
|
this.client = null;
|
|
|
|
// Vide le tchat
|
|
this.chatArea.setText("");
|
|
|
|
// Active le formulaire de connexion
|
|
addressInput.setEnabled(true);
|
|
portInput.setEnabled(true);
|
|
pseudoInput.setEnabled(true);
|
|
|
|
// Désactive l'interface de tchat
|
|
messageInput.setEnabled(false);
|
|
envoyerButton.setEnabled(false);
|
|
}
|
|
|
|
/**
|
|
* Affiche un nouveau message dans la fenêtre de tchat
|
|
* @param message message à afficher dans le tchat
|
|
*/
|
|
public void displayNewMessage(String message) {
|
|
// Ajoute le message dans l'interface de tchat
|
|
chatArea.append(String.format("%s\n", message));
|
|
|
|
// Va en bas de la fenêtre
|
|
JScrollBar vertical = scrollPane.getVerticalScrollBar();
|
|
vertical.setValue(vertical.getMaximum());
|
|
}
|
|
|
|
/**
|
|
* Lance une nouvelle fenêtre de client
|
|
* @param args non utilisé
|
|
*/
|
|
public static void main(String[] args) {
|
|
new FenetreClient();
|
|
}
|
|
}
|