Event fix

This commit is contained in:
2025-10-08 15:04:08 +02:00
parent 49e32b316e
commit 90874a3296

View File

@@ -6,65 +6,68 @@ import java.util.function.Consumer;
* La classe <code>Event</code> regroupe et branche tous les listeners liés à Fenetre. * La classe <code>Event</code> regroupe et branche tous les listeners liés à Fenetre.
* - Validation de la saisie (1 lettre A-Z, majuscule) * - Validation de la saisie (1 lettre A-Z, majuscule)
* - Action sur Entrée ou clic bouton * - Action sur Entrée ou clic bouton
* - Notification du handler externe (Fenetre#setOnLetterSubmitted) * - Notification du handler externe (fourni au constructeur)
* Aucune logique de jeu ici. * Aucune logique de jeu ici.
* @version 1.1 * @version 1.2
* @author Adrien * author Adrien
* Date : 08-10-2025 * Date : 08-10-2025
* Licence : * Licence :
*/ */
public class Event { public class Event implements ActionListener {
private final Fenetre fenetre; private final Fenetre window;
private final Consumer<Character> onLetterSubmitted; private final Consumer<Character> onLetterSubmitted;
public Event(Fenetre fenetre, Consumer<Character> onLetterSubmitted) { public Event(Fenetre window, Consumer<Character> onLetterSubmitted) {
this.fenetre = fenetre; this.window = window;
this.onLetterSubmitted = onLetterSubmitted; this.onLetterSubmitted = onLetterSubmitted;
wireEvents(); wireEvents();
} }
/** Branchement des listeners sur les composants de Fenetre. */ /** Branche les listeners sur les composants de Fenetre. */
private void wireEvents() { private void wireEvents() {
JTextField letterInput = fenetre.getLetterInput(); JTextField letterInput = window.getLetterInput();
JButton sendButton = fenetre.getSendButton(); JButton sendButton = window.getSendButton();
// Action (Entrée + clic bouton) // Même listener (this) pour Entrée et clic bouton
Action sendAction = new AbstractAction() { sendButton.addActionListener(this);
@Override public void actionPerformed(ActionEvent e) { submitLetter(); } letterInput.addActionListener(this);
};
sendButton.addActionListener(sendAction);
letterInput.addActionListener(sendAction);
// UX : limiter à une seule lettre et forcer la majuscule // UX : limiter à une seule lettre et forcer la majuscule
letterInput.addKeyListener(new KeyAdapter() { letterInput.addKeyListener(new KeyAdapter() {
@Override public void keyTyped(KeyEvent e) { @Override
char c = e.getKeyChar(); public void keyTyped(KeyEvent keyEvent) {
if (!Character.isLetter(c) || letterInput.getText().length() >= 1) { char typedChar = keyEvent.getKeyChar();
e.consume(); if (!Character.isLetter(typedChar) || letterInput.getText().length() >= 1) {
keyEvent.consume();
} else { } else {
e.setKeyChar(Character.toUpperCase(c)); 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. */ /** Récupère, valide et transmet la lettre au handler externe. */
private void submitLetter() { private void submitLetter() {
JTextField letterInput = fenetre.getLetterInput(); JTextField letterInput = window.getLetterInput();
String text = letterInput.getText().trim().toUpperCase(); String inputText = letterInput.getText().trim().toUpperCase();
letterInput.setText(""); letterInput.setText("");
if (text.length() != 1 || !text.matches("[A-Z]")) { if (inputText.length() != 1 || !inputText.matches("[A-Z]")) {
JOptionPane.showMessageDialog(fenetre.getWindow(), "Veuillez entrer une seule lettre (A-Z)."); JOptionPane.showMessageDialog(window.getWindow(), "Veuillez entrer une seule lettre (A-Z).");
return; return;
} }
if (onLetterSubmitted != null) { if (onLetterSubmitted != null) {
onLetterSubmitted.accept(text.charAt(0)); onLetterSubmitted.accept(inputText.charAt(0));
} else { } else {
JOptionPane.showMessageDialog(fenetre.getWindow(), "Lettre soumise (placeholder) : " + text); JOptionPane.showMessageDialog(window.getWindow(), "Lettre soumise (placeholder) : " + inputText);
} }
} }
} }