forked from menault/TD3_DEV51_Qualite_Algo
Fenetre fix + Event.java
This commit is contained in:
70
src/Event.java
Normal file
70
src/Event.java
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user