Files
TD3_DEV51_dick_amary/src/Event.java
2025-10-08 15:33:32 +02:00

63 lines
2.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import javax.swing.*;
import java.awt.event.*;
import java.util.function.Consumer;
/**
* 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
*/
public class Event implements ActionListener {
private final Fenetre window;
private final Consumer<Character> onLetterSubmitted;
/** Constructeur : conserve les références et branche les événements. */
public Event(Fenetre window, Consumer<Character> 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 AZ
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);
}
}
}