Fenetre fix + Event.java

This commit is contained in:
2025-10-08 14:53:45 +02:00
parent 06daa4e478
commit 49e32b316e
3 changed files with 103 additions and 80 deletions

70
src/Event.java Normal file
View File

@@ -0,0 +1,70 @@
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 (Fenetre#setOnLetterSubmitted)
* Aucune logique de jeu ici.
* @version 1.1
* @author Adrien
* Date : 08-10-2025
* Licence :
*/
public class Event {
private final Fenetre fenetre;
private final Consumer<Character> onLetterSubmitted;
public Event(Fenetre fenetre, Consumer<Character> onLetterSubmitted) {
this.fenetre = fenetre;
this.onLetterSubmitted = onLetterSubmitted;
wireEvents();
}
/** Branchement des listeners sur les composants de Fenetre. */
private void wireEvents() {
JTextField letterInput = fenetre.getLetterInput();
JButton sendButton = fenetre.getSendButton();
// Action (Entrée + clic bouton)
Action sendAction = new AbstractAction() {
@Override public void actionPerformed(ActionEvent e) { submitLetter(); }
};
sendButton.addActionListener(sendAction);
letterInput.addActionListener(sendAction);
// UX : limiter à une seule lettre et forcer la majuscule
letterInput.addKeyListener(new KeyAdapter() {
@Override public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
if (!Character.isLetter(c) || letterInput.getText().length() >= 1) {
e.consume();
} else {
e.setKeyChar(Character.toUpperCase(c));
}
}
});
}
/** Récupère, valide et transmet la lettre au handler externe. */
private void submitLetter() {
JTextField letterInput = fenetre.getLetterInput();
String text = letterInput.getText().trim().toUpperCase();
letterInput.setText("");
if (text.length() != 1 || !text.matches("[A-Z]")) {
JOptionPane.showMessageDialog(fenetre.getWindow(), "Veuillez entrer une seule lettre (A-Z).");
return;
}
if (onLetterSubmitted != null) {
onLetterSubmitted.accept(text.charAt(0));
} else {
JOptionPane.showMessageDialog(fenetre.getWindow(), "Lettre soumise (placeholder) : " + text);
}
}
}