IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Saisie en majuscule dans un JCombo


Sujet :

AWT/Swing Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 22
    Par défaut Saisie en majuscule dans un JCombo
    Bonjour,
    Je ne pratique Java que depuis quelques semaines, je suis confronté a un petit problème, c'est pourquoi je créé ce nouveau sujet

    Pouvez vous m'expliquer comment modifier un Jcombo éditable pour obliger la saisie des caratères en majuscules ?

    Olivier.

  2. #2
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    SAlut,

    je dirais de lui mettre un KeyListener dessus et quand une touche est activé de recuperer le texte et de lui appliquer un toUpperCase() par exemple

  3. #3
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    Juste une question, pourquoi veux-tu fixer cette règle?

    Pour un stockage de ces informations ? Pour faire une recherche ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 22
    Par défaut
    - J'ai essayé un Key listener mais cette methode ne marches pas
    les methodes associées ne sont pas appelées

    - C'est pour faire des recherches dans une bdd ou les champs sur lesquels j'effectue les recherches sont en majuscules

  5. #5
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    Alors tu n'as pas à contraindre l'utilisateur à saisir les caractères en majuscules.

    C'est à toi lors de la récupération de la chaîne, de passer cette dernière en majuscule et de faire les recherches appropriées.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 22
    Par défaut
    Dans mes requetes SQL j'ai ajouté un UPPER () afin de pallier à ce PB.

    Mon Pb c'est que je ré écris en JAVA une partie d'une appli existante en C++/Ilog qui sera obsolète dans quelques temps...
    Dans cette appli la saisie dans les combo est en MAJ et le client risque de me demander de faire de même pour ne pas "choquer" les utilisateurs.

  7. #7
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    D'accord je comprends

    Suite au post de BainE tu as dit que les méthodes appelées ne fonctionnaient pas, tu peux expliquer ce que tu as fait et au pire poster ton code qu'on regarde

  8. #8
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    As tu bien le addKeyListener() sur ton comboBox ?

  9. #9
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par BainE
    As tu bien le addKeyListener() sur ton comboBox ?
    D'expérience cette méthode n'est pas vraiment géniale car faire un toUpperCase() sur la valeur dans le composant va provoquer un déplacement du caret.

    Personnellement j'ai fait mon propre javax.swing.text.PlainDocument dans le JTextField d'édition afin d'avoir le comportement souhaité, il gère la longueur limite et le uppercase forcé.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    import javax.swing.text.AttributeSet;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.PlainDocument;
     
    import org.apache.log4j.Logger;
     
    /**
     * Document with a specified max length.
     * 
     * @author natha
     */
    public class ConfigurableDocument extends PlainDocument {
     
    	/** The Logger */
    	private static Logger s_logger = Logger.getLogger(ConfigurableDocument.class);
     
    	/** Max length autorized for the document */
    	private int m_maxLength;
     
    	/** Force uppercase ? */
    	private boolean m_forceUppercase;
     
    	/**
             * Create a Document with a specified max length.
             * 
             * @param maxLength The maximum length permitted in this document.
             */
    	public ConfigurableDocument(int maxLength) {
    		super();
    		this.m_maxLength = maxLength;
    	}
     
    	/* (non-Javadoc)
    	 * @see javax.swing.text.PlainDocument#insertString(int, java.lang.String, javax.swing.text.AttributeSet)
    	 */
    	@Override
    	public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
    		String inputText = str;
    		if (inputText != null && inputText.length() + getLength() > m_maxLength) {
    			inputText = inputText.substring(0, inputText.length() - (inputText.length() + getLength() - m_maxLength));
    		}
    		if (m_forceUppercase) {
    			inputText = (inputText != null ? inputText.toUpperCase() : null);
    		}
    		super.insertString(offs, inputText, a);
    	}
     
    	/* (non-Javadoc)
    	 * @see javax.swing.text.AbstractDocument#replace(int, int, java.lang.String, javax.swing.text.AttributeSet)
    	 */
    	@Override
    	public void replace(int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
    		String inputText = text;
    		if (inputText != null && inputText.length() + getLength() - length > m_maxLength) {
    			inputText = inputText.substring(0, inputText.length() - (inputText.length() + getLength() - length - m_maxLength));
    		}
    		super.replace(offset, length, inputText, attrs);
    	}
     
    	/**
             * @return the forceUppercase
             */
    	public boolean isForceUppercase() {
    		return this.m_forceUppercase;
    	}
     
    	/**
             * @param forceUppercase the forceUppercase to set
             */
    	public void setForceUppercase(boolean forceUppercase) {
    		this.m_forceUppercase = forceUppercase;
    		if (forceUppercase) {
    			try {
    				replace(0, getLength(), this.getText(0, getLength()).toUpperCase(), null);
    			} catch (BadLocationException e) {
    				s_logger.fatal(e.getMessage(), e);
    			}
    		}
    	}
     
    }
    S'il y a mieux à faire je suis preneur

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 22
    Par défaut
    J'ai créé une classe dérivant de Jcombo elle implémente KeyListener

    et dans le constructeur j'ai codé : this.addKeyListener(this);

    les 3 méthodes keyPressed, keyReleased et keyTyped sont codées avec un simple System.out.println(<nom methode>) pour débugger

    lorsque j'affiche cette IHM et que je saisi des caracteres dans cet objet aucune trace n'est affichée.

    Pour moi soit ce n'est pas la bonne technique soit je n'utilise pas la bonne methode pour retrouver ce qui a été saisi.
    si je ne suis pas assez clair je vous transmet mon code

    Merci de votre rapidité de réponse je suis bluffé !

    olivier.

  11. #11
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par natha
    S'il y a mieux à faire je suis preneur
    Cette solution est tout à fait correct ! De plus elle est indiqué dans la doc de JTextField


    Il ne reste plus qu'à l'intégrer au JComboBox éditable via la méthode setEditor() en se créant son propre éditeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public class ComboBoxUpperCaseEditor extends JTextField implements ComboBoxEditor {
     
    	ComboBoxUpperCaseEditor() {
    		super(new UpperCaseDocument(), null, 0);
    	}
     
    	public Component getEditorComponent() {
    		return this;
    	}
     
    	public Object getItem() {
    		return getText();
    	}
     
    	public void setItem(Object anObject) {
    		setText( anObject!=null ? anObject.toString() : "");
    	}
     
    	private static class UpperCaseDocument extends PlainDocument {
    		@Override
    		public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
    			super.insertString(offs, str.toUpperCase(), a);
    		}
    	};
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	JComboBox combo = ...
    	combo.setEditable(true);
    	combo.setEditor(new ComboBoxUpperCaseEditor());
    a++

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 22
    Par défaut Merci.
    Merci a vous 3 pour ces precieux conseils.
    J'ai testé la classe ComboBoxUpperCaseEditor de adiGuba et ca a marché presque au premier coup.

    J'ai remplacé (grace a eclipse ... )
    public void insertString(int offs, String str, a)
    par
    public void insertString(int offs, String str, javax.swing.text.AttributeSet a)

    Et c'etait tout bon

    Olivier,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Forcer la saisie en majuscule dans un textbox
    Par azertym dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/03/2012, 10h57
  2. Réponses: 7
    Dernier message: 05/12/2011, 16h39
  3. forcer la saisie en majuscule dans une input
    Par griese dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 27/10/2009, 17h02
  4. Forcer la saisie en MAJ dans un Formulaire
    Par lolos dans le forum IHM
    Réponses: 4
    Dernier message: 12/08/2003, 11h57
  5. Réponses: 3
    Dernier message: 19/03/2003, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo