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