2025-10-08 14:53:45 +02:00
|
|
|
|
import javax.swing.*;
|
|
|
|
|
|
import java.awt.event.*;
|
|
|
|
|
|
import java.util.function.Consumer;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2025-10-08 15:15:04 +02:00
|
|
|
|
* La classe <code>Event</code> regroupe et branche tous les listeners liés à Fenetre.
|
|
|
|
|
|
* - Validation de la saisie (1 lettre A-Z, majuscule)
|
|
|
|
|
|
* - Action sur Entrée ou clic bouton
|
|
|
|
|
|
* - Notification du handler externe (fourni au constructeur)
|
|
|
|
|
|
* Aucune logique de jeu ici.
|
|
|
|
|
|
* @version 1.3
|
|
|
|
|
|
* author Adrien
|
|
|
|
|
|
* Date : 08-10-2025
|
|
|
|
|
|
*/
|
2025-10-08 15:04:08 +02:00
|
|
|
|
public class Event implements ActionListener {
|
2025-10-08 14:53:45 +02:00
|
|
|
|
|
2025-10-08 15:04:08 +02:00
|
|
|
|
private final Fenetre window;
|
2025-10-08 14:53:45 +02:00
|
|
|
|
private final Consumer<Character> onLetterSubmitted;
|
|
|
|
|
|
|
2025-10-08 15:15:04 +02:00
|
|
|
|
/** Constructeur : conserve les références et branche les événements. */
|
2025-10-08 15:04:08 +02:00
|
|
|
|
public Event(Fenetre window, Consumer<Character> onLetterSubmitted) {
|
|
|
|
|
|
this.window = window;
|
2025-10-08 14:53:45 +02:00
|
|
|
|
this.onLetterSubmitted = onLetterSubmitted;
|
|
|
|
|
|
wireEvents();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-10-08 15:33:32 +02:00
|
|
|
|
/** Branche les listeners sur les composants de Fenetre. */
|
2025-10-08 14:53:45 +02:00
|
|
|
|
private void wireEvents() {
|
2025-10-08 15:04:08 +02:00
|
|
|
|
JTextField letterInput = window.getLetterInput();
|
|
|
|
|
|
JButton sendButton = window.getSendButton();
|
2025-10-08 14:53:45 +02:00
|
|
|
|
|
2025-10-08 15:04:08 +02:00
|
|
|
|
// Même listener (this) pour Entrée et clic bouton
|
|
|
|
|
|
sendButton.addActionListener(this);
|
|
|
|
|
|
letterInput.addActionListener(this);
|
2025-10-08 14:53:45 +02:00
|
|
|
|
|
2025-10-08 15:33:32 +02:00
|
|
|
|
// UX : limiter à une seule lettre et forcer la majuscule (classe dédiée)
|
|
|
|
|
|
letterInput.addKeyListener(new LetterInputFilter(letterInput));
|
2025-10-08 14:53:45 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-10-08 15:15:04 +02:00
|
|
|
|
/** Réagit à Entrée ou au clic bouton : récupère, valide et transmet la lettre. */
|
2025-10-08 15:04:08 +02:00
|
|
|
|
@Override
|
|
|
|
|
|
public void actionPerformed(ActionEvent actionEvent) {
|
|
|
|
|
|
JTextField letterInput = window.getLetterInput();
|
2025-10-08 15:15:04 +02:00
|
|
|
|
|
2025-10-08 15:04:08 +02:00
|
|
|
|
String inputText = letterInput.getText().trim().toUpperCase();
|
2025-10-08 15:15:04 +02:00
|
|
|
|
letterInput.setText(""); // reset du champ après tentative
|
2025-10-08 14:53:45 +02:00
|
|
|
|
|
2025-10-08 15:15:04 +02:00
|
|
|
|
// Validation : exactement une lettre A–Z
|
2025-10-08 15:04:08 +02:00
|
|
|
|
if (inputText.length() != 1 || !inputText.matches("[A-Z]")) {
|
|
|
|
|
|
JOptionPane.showMessageDialog(window.getWindow(), "Veuillez entrer une seule lettre (A-Z).");
|
2025-10-08 14:53:45 +02:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-10-08 15:15:04 +02:00
|
|
|
|
// Notification du handler externe, sinon placeholder
|
2025-10-08 14:53:45 +02:00
|
|
|
|
if (onLetterSubmitted != null) {
|
2025-10-08 15:04:08 +02:00
|
|
|
|
onLetterSubmitted.accept(inputText.charAt(0));
|
2025-10-08 14:53:45 +02:00
|
|
|
|
} else {
|
2025-10-08 15:15:04 +02:00
|
|
|
|
JOptionPane.showMessageDialog(window.getWindow(),
|
|
|
|
|
|
"Lettre soumise (placeholder) : " + inputText);
|
2025-10-08 14:53:45 +02:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|