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. | ||||
| * - Validation de la saisie (1 lettre A-Z, majuscule) | ||||
| * - 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. | ||||
| * @version 1.1 | ||||
| * @author Adrien | ||||
| * @version 1.2 | ||||
| * author Adrien | ||||
| * Date : 08-10-2025 | ||||
| * Licence : | ||||
| */ | ||||
| public class Event { | ||||
| public class Event implements ActionListener { | ||||
|  | ||||
|     private final Fenetre fenetre; | ||||
|     private final Fenetre window; | ||||
|     private final Consumer<Character> onLetterSubmitted; | ||||
|  | ||||
|     public Event(Fenetre fenetre, Consumer<Character> onLetterSubmitted) { | ||||
|         this.fenetre = fenetre; | ||||
|     public Event(Fenetre window, Consumer<Character> onLetterSubmitted) { | ||||
|         this.window = window; | ||||
|         this.onLetterSubmitted = onLetterSubmitted; | ||||
|         wireEvents(); | ||||
|     } | ||||
|  | ||||
|     /** Branchement des listeners sur les composants de Fenetre. */ | ||||
|     /** Branche les listeners sur les composants de Fenetre. */ | ||||
|     private void wireEvents() { | ||||
|         JTextField letterInput = fenetre.getLetterInput(); | ||||
|         JButton sendButton = fenetre.getSendButton(); | ||||
|         JTextField letterInput = window.getLetterInput(); | ||||
|         JButton sendButton = window.getSendButton(); | ||||
|  | ||||
|         // Action (Entrée + clic bouton) | ||||
|         Action sendAction = new AbstractAction() { | ||||
|             @Override public void actionPerformed(ActionEvent e) { submitLetter(); } | ||||
|         }; | ||||
|         sendButton.addActionListener(sendAction); | ||||
|         letterInput.addActionListener(sendAction); | ||||
|         // Même listener (this) pour Entrée et clic bouton | ||||
|         sendButton.addActionListener(this); | ||||
|         letterInput.addActionListener(this); | ||||
|  | ||||
|         // 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(); | ||||
|             @Override | ||||
|             public void keyTyped(KeyEvent keyEvent) { | ||||
|                 char typedChar = keyEvent.getKeyChar(); | ||||
|                 if (!Character.isLetter(typedChar) || letterInput.getText().length() >= 1) { | ||||
|                     keyEvent.consume(); | ||||
|                 } 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. */ | ||||
|     private void submitLetter() { | ||||
|         JTextField letterInput = fenetre.getLetterInput(); | ||||
|         String text = letterInput.getText().trim().toUpperCase(); | ||||
|         JTextField letterInput = window.getLetterInput(); | ||||
|         String inputText = 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)."); | ||||
|         if (inputText.length() != 1 || !inputText.matches("[A-Z]")) { | ||||
|             JOptionPane.showMessageDialog(window.getWindow(), "Veuillez entrer une seule lettre (A-Z)."); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         if (onLetterSubmitted != null) { | ||||
|             onLetterSubmitted.accept(text.charAt(0)); | ||||
|             onLetterSubmitted.accept(inputText.charAt(0)); | ||||
|         } else { | ||||
|             JOptionPane.showMessageDialog(fenetre.getWindow(), "Lettre soumise (placeholder) : " + text); | ||||
|             JOptionPane.showMessageDialog(window.getWindow(), "Lettre soumise (placeholder) : " + inputText); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user