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

 Java Discussion :

personnaliser le curseur de saisie


Sujet :

Java

  1. #1
    Membre régulier Avatar de abdennour bouaicha
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2009
    Messages : 98
    Points : 112
    Points
    112
    Par défaut personnaliser le curseur de saisie
    salut ,
    je voudrais rendre le curseur quand il est sur une JTextField comme celui du MS DOS:
    Nom : cur1.png
Affichages : 167
Taille : 3,3 Ko
    j'ai réussie à changer sa couleur:
    Nom : cur2.png
Affichages : 169
Taille : 1,9 Ko
    par ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    textField.setCaretColor( Color.red );
    mais je me suis bloqué pour le rendre comme tiret 8 "_".
    merci d'avance.

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il faut implémenter javax.swing.text.Caret et utiliser la méthode JTextField.setCaret() pour l'affecter. On peut s'aider de javax.swing.text.DefaultCaret pour ne pas avoir à tout implémenter.

    Voici un exemple de Caret à partir d'un char :

    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    import java.awt.Color;
    import java.awt.FontMetrics;
    import java.awt.Graphics;
    import java.awt.GridBagLayout;
    import java.awt.Rectangle;
    import java.awt.geom.Rectangle2D;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.DefaultCaret;
    import javax.swing.text.JTextComponent;
     
    public class CaretExample {
     
    	public static void main(String[] args) {
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JPanel panel = new JPanel(new GridBagLayout());
     
    		JTextField field = new JTextField(10);
    		panel.add(field);
     
    		field.setCaretColor(Color.RED);
    		field.setCaret(new CustomCaret('_'));
     
     
    		frame.add(panel);
     
    		frame.setSize(600, 400);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    	public static class CustomCaret extends DefaultCaret {
     
            private final String mark;
     
    		public CustomCaret(char c) {
            	this(c, 500);
            }
            public CustomCaret(char c, int blinkrate) {
            	mark = String.valueOf(c);
                setBlinkRate(blinkrate);
            }
     
            @Override
            protected synchronized void damage(Rectangle r) {
                if (r == null) {
                    return;
                }
     
                JTextComponent comp = getComponent();
                FontMetrics fm = comp.getFontMetrics(comp.getFont());
                int textWidth = fm.stringWidth(mark);
                int textHeight = fm.getHeight();
                x = r.x;
                y = r.y;
                width = textWidth;
                height = textHeight;
                repaint();
            }
     
            @Override
            public void paint(Graphics g) {
                JTextComponent comp = getComponent();
                if (comp == null) {
                    return;
                }
     
                int dot = getDot();
                try {
                    Rectangle2D rectangle = comp.modelToView2D(dot);
                    if ( rectangle!=null) {
                    	Rectangle r = rectangle.getBounds();
                    	if ( x != r.x || y != r.y) {
    	                    damage(r);
    	                }
     
    	                if (isVisible()) {
    	                    FontMetrics fm = comp.getFontMetrics(comp.getFont());
    	                    g.setColor(comp.getCaretColor());
    	                    g.drawString(mark, x, y + fm.getAscent());
    	                }
                    }
     
                } catch (BadLocationException e) {
                	// ignore
                }
     
            }
     
     
     
    	}
     
    }
    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 régulier Avatar de abdennour bouaicha
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2009
    Messages : 98
    Points : 112
    Points
    112
    Par défaut
    impeccable
    merci beaucoup camarade, ça marche.

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

Discussions similaires

  1. Curseur de saisie qui disparait sous firefox mais pas sous IE
    Par s1pike dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/10/2006, 23h58
  2. Problème curseur de saisie sous Access
    Par anonymenet dans le forum Access
    Réponses: 2
    Dernier message: 27/06/2006, 10h55
  3. [FLASH MX2004] Personnaliser les champs de saisie?
    Par Rei Itchido dans le forum Flash
    Réponses: 5
    Dernier message: 21/03/2006, 17h45
  4. faire disparaitre le curseur de saisie et ...
    Par lacsap49 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/01/2006, 14h45

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