Para quem necessitar, segue um modelo de JTextField para nomes, que coloca automaticamente as primeiras letras do nome em maíusculo enquanto o usuário digita, ele reconhece casos como "Pedro da Silva" e "José C. da Silva"; qualquer dúvida ou sugestões enviem comentários.
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
public class NomeTextField2 extends JTextField
{
public NomeTextField2()
{
super();
setDocument(new PlainDocument()
{
@Override
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException
{
if (offs != 0 && str.contains(" "))
{
ajustaTexto();
}
super.insertString(offs, str, a);
}
});
addFocusListener(new FocusListener()
{
@Override
public void focusLost(FocusEvent e)
{
ajustaTexto();
}
@Override
public void focusGained(FocusEvent e)
{
}
});
}
private void ajustaTexto()
{
setText(PrimeiraMaiuscula(getText()));
}
private String PrimeiraMaiuscula(String o)
{
if (o == null)
{
return null;
}
StringBuffer nome = new StringBuffer();
String[] tmp;
tmp = o.toLowerCase().split(" ");
for (int i = 0; i < tmp.length; i++)
{
if (tmp[i].length() > 2 || (tmp[i].length() == 2 && tmp[i].substring(1, 2).equals(".")))
{
nome.append(tmp[i].replaceFirst(tmp[i].substring(0, 1), tmp[i].substring(0, 1)
.toUpperCase())
+ " ");
}
else
{
nome.append(tmp[i] + " ");
}
}
return nome.toString().trim();
}
}