2017-04-03 2 views
0

Est-il possible de tirer parti de la première lettre dans un champ de texteCapitaliser premières lettres dans un champ de texte en Java

Par ex L'utilisateur taperait 'bonjour' et 'bonjour' apparaîtrait dans le champ de texte.

Je condamné à une amende de ce code pour tirer toutes les lettres http://www.java2s.com/Tutorial/Java/0240__Swing/FormatJTextFieldstexttouppercase.htm

et je tente de le modifier pour tirer parti seul le premier lette r mis il est faux

c'est mon modifier

public class UppercaseDocumentFilter extends DocumentFilter { 

public void insertString(DocumentFilter.FilterBypass fb, int offset, String text,AttributeSet attr) throws BadLocationException { 
    fb.insertString(offset, text.substring(0, 1).toUpperCase() + text.substring(1), attr); 
    } 

    public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text,AttributeSet attrs) throws BadLocationException { 
    fb.replace(offset, length, text.substring(0, 1).toUpperCase() + text.substring(1), attrs); 
    } 

} 

Répondre

1

Vous êtes sur la bonne direction, vous pouvez jeter un oeil à fb.getDocument().getLength() pour déterminer la longueur actuelle de Document, quand il est 0, mettre à jour le f caractère IRST du text

Vous pourriez alors être en mesure d'utiliser quelque chose comme ...

String text = "testing"; 
StringBuilder sb = new StringBuilder(text); 
sb.setCharAt(0, Character.toUpperCase(sb.charAt(0))); 
text = sb.toString(); 
System.out.println(text); 

pour capitalisent le premier caractère de l'entrée text. Vous voudrez peut-être faire d'autres vérifications, mais c'est l'idée de base

Exemple

semble fonctionner bien pour moi

public class UppercaseDocumentFilter extends DocumentFilter { 

    public void insertString(DocumentFilter.FilterBypass fb, int offset, String text, AttributeSet attr) throws BadLocationException { 
     if (fb.getDocument().getLength() == 0) { 
      StringBuilder sb = new StringBuilder(text); 
      sb.setCharAt(0, Character.toUpperCase(sb.charAt(0))); 
      text = sb.toString(); 
     } 
     fb.insertString(offset, text, attr); 
    } 

    public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { 
     if (fb.getDocument().getLength() == 0) { 
      StringBuilder sb = new StringBuilder(text); 
      sb.setCharAt(0, Character.toUpperCase(sb.charAt(0))); 
      text = sb.toString(); 
     } 
     fb.replace(offset, length, text, attrs); 
    } 

} 
+0

merci. J'ai utilisé fb.getDocument(). GetLength() et ma mise à jour si (fb.getDocument(). GetLength() == 0) { fb.replace (offset, longueur, text.toUpperCase(), attrs); } else { fb.replace (décalage, longueur, texte, attr); } – amirouche

+0

Non, ce n'est pas ce que j'ai suggéré, vous convertissez tout le texte en majuscule, que se passe-t-il si l'utilisateur colle du texte dans le champ? Ou vous appelez 'setText', vous allez mettre tout le texte en majuscules. – MadProgrammer

+0

-_-, oui tout le texte à faire en majuscule quand passé, j'ai traed votre deuxième suggestion ne pas travaillé. est-ce que je peux appeler n'importe quelle méthode quand l'utilisateur essaye de passer dans le champ? – amirouche