From 7206dca3ef1c8b381f1ca151dd84f1c5f29368d2 Mon Sep 17 00:00:00 2001 From: dick Date: Wed, 8 Oct 2025 15:33:32 +0200 Subject: [PATCH] Fix classe anonyme --- src/Event.java | 16 +++---------- src/LetterInputFilter.java | 47 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 13 deletions(-) create mode 100644 src/LetterInputFilter.java diff --git a/src/Event.java b/src/Event.java index 88d9394..78b83af 100644 --- a/src/Event.java +++ b/src/Event.java @@ -24,7 +24,7 @@ public class Event implements ActionListener { wireEvents(); } - /** Branche les listeners sur les composants de Fenetre.*/ + /** Branche les listeners sur les composants de Fenetre. */ private void wireEvents() { JTextField letterInput = window.getLetterInput(); JButton sendButton = window.getSendButton(); @@ -33,18 +33,8 @@ public class Event implements ActionListener { sendButton.addActionListener(this); letterInput.addActionListener(this); - // UX : limiter à une seule lettre et forcer la majuscule - letterInput.addKeyListener(new KeyAdapter() { - @Override - public void keyTyped(KeyEvent keyEvent) { - char typedChar = keyEvent.getKeyChar(); - if (!Character.isLetter(typedChar) || letterInput.getText().length() >= 1) { - keyEvent.consume(); - } else { - keyEvent.setKeyChar(Character.toUpperCase(typedChar)); - } - } - }); + // UX : limiter à une seule lettre et forcer la majuscule (classe dédiée) + letterInput.addKeyListener(new LetterInputFilter(letterInput)); } /** Réagit à Entrée ou au clic bouton : récupère, valide et transmet la lettre. */ diff --git a/src/LetterInputFilter.java b/src/LetterInputFilter.java new file mode 100644 index 0000000..44c293e --- /dev/null +++ b/src/LetterInputFilter.java @@ -0,0 +1,47 @@ +import javax.swing.*; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; + +/** + * La classe LetterInputFilter limite la saisie d'un champ texte + * à une seule lettre de l'alphabet (A–Z), en forçant automatiquement + * la majuscule. Toute autre frappe est ignorée. + * + * @version 1.0 + * @author Adrien + * Date : 08-10-2025 + * Licence : + */ +public class LetterInputFilter extends KeyAdapter { + + /** Référence vers le champ de saisie à filtrer. */ + private final JTextField letterInput; + + //Constructeur. + public LetterInputFilter(JTextField letterInput) { + if (letterInput == null) { + throw new NullPointerException("letterInput ne doit pas être null"); + } + this.letterInput = letterInput; + } + + /** + * Intercepte les frappes clavier et applique les règles suivantes : + * - n'accepte que les lettres (A–Z) + * - limite la saisie à un seul caractère + * - force la majuscule sur le caractère saisi. + */ + @Override + public void keyTyped(KeyEvent keyEvent) { + char typedChar = keyEvent.getKeyChar(); + + // Refuse tout caractère non alphabétique ou une saisie > 1 caractère. + if (!Character.isLetter(typedChar) || letterInput.getText().length() >= 1) { + keyEvent.consume(); // ignore la frappe + return; + } + + // Force la majuscule. + keyEvent.setKeyChar(Character.toUpperCase(typedChar)); + } +} -- 2.51.0