Files
TD3_DEV51_dick_amary/src/Event.java

74 lines
2.5 KiB
Java
Raw Normal View History

2025-10-08 14:53:45 +02:00
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
2025-10-08 15:04:08 +02:00
* - Notification du handler externe (fourni au constructeur)
2025-10-08 14:53:45 +02:00
* Aucune logique de jeu ici.
2025-10-08 15:04:08 +02:00
* @version 1.2
* author Adrien
2025-10-08 14:53:45 +02:00
* Date : 08-10-2025
* Licence :
*/
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: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:04:08 +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
// UX : limiter à une seule lettre et forcer la majuscule
letterInput.addKeyListener(new KeyAdapter() {
2025-10-08 15:04:08 +02:00
@Override
public void keyTyped(KeyEvent keyEvent) {
char typedChar = keyEvent.getKeyChar();
if (!Character.isLetter(typedChar) || letterInput.getText().length() >= 1) {
keyEvent.consume();
2025-10-08 14:53:45 +02:00
} else {
2025-10-08 15:04:08 +02:00
keyEvent.setKeyChar(Character.toUpperCase(typedChar));
2025-10-08 14:53:45 +02:00
}
}
});
}
2025-10-08 15:04:08 +02:00
/** Réagit à Entrée ou au clic bouton : soumet la lettre. */
@Override
public void actionPerformed(ActionEvent actionEvent) {
submitLetter();
}
2025-10-08 14:53:45 +02:00
/** Récupère, valide et transmet la lettre au handler externe. */
private void submitLetter() {
2025-10-08 15:04:08 +02:00
JTextField letterInput = window.getLetterInput();
String inputText = letterInput.getText().trim().toUpperCase();
2025-10-08 14:53:45 +02:00
letterInput.setText("");
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;
}
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:04:08 +02:00
JOptionPane.showMessageDialog(window.getWindow(), "Lettre soumise (placeholder) : " + inputText);
2025-10-08 14:53:45 +02:00
}
}
}