forked from menault/TD3_DEV51_Qualite_Algo
Event fix
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user