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 :

[Swing] Héritage de JFormattedTextField


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 49
    Par défaut [Swing] Héritage de JFormattedTextField
    Bonjour,

    Afin de ne pas réécrire les listener à chaque utilisation d'un JFormattedTextField, j'ai crée un IntegerFormattedTextField héritant de JFormattedTextField et définissant le listener avec changement de couleur en fonction de la frappe. Par exemple lorsque l'utilisateur frappe une lettre, tous les caractères passent en rouge ...

    on a donc quelque chose comme cela :

    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
     
    public class IntegerFormattedTextField extends JFormattedTextField {
     
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	private int min;
     
    	private int max;
     
    	private String textValue = "";
     
    	private Object o;
     
    	private Enum enumOb;
     
    	public IntegerFormattedTextField(RegexFormatter integer_formatter,
    			JPanel panel, GridBagConstraints gbc, int min, int max, Object o,
    			Enum enumOb) {
    		super(integer_formatter);
    		this.enumOb = enumOb;
    		this.min = min;
    		this.max = max;
    		this.o = o;
     
    		textValue = getValueObject();
     
    		setForeground(Color.gray);
    		this.setText(textValue);
     
    		this.addKeyListener(new KeyListener() {
                     ...
    			}
    		});
     
    		panel.add(this, gbc);
    	}
     
    	public IntegerFormattedTextField(JPanel panel, GridBagConstraints gbc,
    			Object o, Enum enumOb) {
    		RegexFormatter integer_formatter = new RegexFormatter("\\d{0,10}");
    		new IntegerFormattedTextField(integer_formatter, panel, gbc,
    				Integer.MIN_VALUE, Integer.MAX_VALUE, o, enumOb);
    	}
    Mais lorsque j'utilise le nouveau composant j'ai des problèmes. Les méthodes setEnabled(false) setForeground(Color.Black) ne fonctionnement pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    		IntegerFormattedTextField client = new IntegerFormattedTextField(
    				client_serial_port, gbc,  getSerialPort(), eSerialPort.StopBit);
    		client.setEnabled(false);
    Le composant n'est pas grisé.

    Je ne comprends pas pourquoi, merci pour vos réponses.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il devrait être disabled vu ton code : c'est-à-dire qu'on ne peut pas saisir dedans. Le texte qui est présent prend une couleur particulière (bleu en ce qui me concerne, mais je pense que ça dépend du LaF).
    Mais peut-être t'attends-tu à un comportement particulier qui n'est pas celui que tu as codé. En tout cas, pour changer la couleur utilisée lors que le champ est disabled, on utilise setDisabledTextColor() par setForeground().
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 49
    Par défaut
    Merci pour la réponse, mais je pense que je me suis mal exprimée.

    Je souhaite que dans certaines configurations le champ soit grisé pour que l'utilisateur ne puisse pas entrer de valeurs et dans d'autres, l'utilisateur entre des valeurs vérifiées lors de la frappe puis modification de la couleur après sauvegarde. J'utilise alors les méthodes de la classe mère, mais aucune ne fonctionne. alors que sur un JTextField classique cela fonctionne très bien. Et c'est cela que je ne comprends pas.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Normalement avec client.setEnabled(false); le composant devrait être désactivé. Là, tu constaterais qu'on peut toujours saisir dedans malgré cet appel, c'est ça ? Il va falloir me donner plus de code, parce que avec ce que tu as déjà mis, je ne vois pas trop pourquoi ça ne fonctionnerait pas.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Par contre, mais rien à voir avec l'état désactivé, mais ce constructeur, là, ça ne va pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public IntegerFormattedTextField(JPanel panel, GridBagConstraints gbc,
    			Object o, Enum enumOb) {
    		RegexFormatter integer_formatter = new RegexFormatter("\\d{0,10}");
    		new IntegerFormattedTextField(integer_formatter, panel, gbc,
    				Integer.MIN_VALUE, Integer.MAX_VALUE, o, enumOb);
    	}
    C'est plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public IntegerFormattedTextField(JPanel panel, GridBagConstraints gbc,
    			Object o, Enum enumOb) {
        this(new RegexFormatter("\\d{0,10}"), panel, gbc,
    				Integer.MIN_VALUE, Integer.MAX_VALUE, o, enumOb);
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 49
    Par défaut
    Merci, c'est bien du à mon erreur dans le constructeur.
    En mettant ta correction, cela fonctionne.

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

Discussions similaires

  1. [Swing] JFormattedTextField et perte de focus
    Par YassVegas dans le forum Débuter
    Réponses: 2
    Dernier message: 01/05/2014, 14h51
  2. [Héritage Swing] Etendre JFrame
    Par Tux++ dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 19/01/2009, 16h40
  3. [Swing] JFormattedTextField : besoin d'eclaircisement
    Par Invité dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 06/05/2006, 00h10
  4. Réponses: 1
    Dernier message: 20/04/2006, 20h29
  5. Héritage entre Forms
    Par BarBal dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 17h44

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