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.2 * author Adrien * Date : 08-10-2025 * Licence : */ public class Event implements ActionListener { private final Fenetre window; private final Consumer onLetterSubmitted; 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 letterInput.addKeyListener(new KeyAdapter() { @Override public void keyTyped(KeyEvent keyEvent) { char typedChar = keyEvent.getKeyChar(); if (!Character.isLetter(typedChar) || letterInput.getText().length() >= 1) { keyEvent.consume(); } else { keyEvent.setKeyChar(Character.toUpperCase(typedChar)); } } }); } /** Réagit à Entrée ou au clic bouton : soumet la lettre. */ @Override public void actionPerformed(ActionEvent actionEvent) { submitLetter(); } /** Récupère, valide et transmet la lettre au handler externe. */ private void submitLetter() { JTextField letterInput = window.getLetterInput(); String inputText = letterInput.getText().trim().toUpperCase(); letterInput.setText(""); if (inputText.length() != 1 || !inputText.matches("[A-Z]")) { JOptionPane.showMessageDialog(window.getWindow(), "Veuillez entrer une seule lettre (A-Z)."); return; } if (onLetterSubmitted != null) { onLetterSubmitted.accept(inputText.charAt(0)); } else { JOptionPane.showMessageDialog(window.getWindow(), "Lettre soumise (placeholder) : " + inputText); } } }