Você poderia usar algo assim:
public static JTextField getUpperField(int columns)
{
JTextField field = new JTextField(columns);
field.setInputVerifier(new UpperVerifier());
return field;
}
onde a classe UpperVerifier é
public class UpperVerifier extends VerifierDecorator
{
public UpperVerifier()
{
this(null);
}
public UpperVerifier(InputVerifier next)
{
super(next);
}
public boolean verify(JComponent input)
{
JTextComponent textComponent = (JTextComponent) input;
textComponent.setText(textComponent.getText().toUpperCase());
return super.verify(input);
}
}
e VerifierDecorator é
public abstract class VerifierDecorator extends InputVerifier
{
private InputVerifier next;
public VerifierDecorator(InputVerifier next)
{
super();
this.next = next;
}
public InputVerifier getNext()
{
return this.next;
}
public boolean verify(JComponent input)
{
if (this.next != null)
return next.verify(input);
else
return true;
}
}
para usar, é algo como
private JTextField textField = FormattedTextFactory.getUpperField();
assumindo que a classe que contém o primeiro método mostrado aqui se chama FormattedTextFactory.
Para casos em que uma verificação única é exigida, o esquema de decoração é dispensável. Porém, isto tudo não vai fazer os caracteres ficarem maiúsculos ao digitar, e sim ao deixar o componente.
Para ficarem maiúsculos ao digitar, você pode usar
teste = new JFormattedTextField();
MaskFormatter formatter = new MaskFormatter();
try
{
formatter.setMask("UUUUUUUUUUUUUUUUUUUUUUUUUUUU");
}
catch (ParseException e)
{
e.printStackTrace(System.err);
}
formatter.setPlaceholderCharacter(' ');
formatter.install(teste);
onde a quantidade de U’s será a quantidade de caracteres maiúsculos que o campo aceitará. Isto funcionará do jeito que você quer, mas considero muito mais adequado e elegante para este caso o uso de verifiers.