André L. S. Desenvolvimento de Softwares, Tecnologia e Games

27ago/090

Limitando número máximo de caracteres em um JTextField

A implementação padrão do JTextField não permite definir um limite para inserção de caracteres. Para habilitar este recurso é necessário implementar um Document, onde será necessário sobrescrever o método insertString.

public class MaxLengthTextDocument extends PlainDocument {
	//Armazena o número máximo de caracteres para o texto.
	private int maxChars;

	@Override
	public void insertString(int offs, String str, AttributeSet a)
			throws BadLocationException {
		if(str != null && (getLength() + str.length() > maxChars)){
			str = str.substring(0, maxChars);
		}
		super.insertString(offs, str, a);
	}

	//getter e setter omitidos
}

Aqui definimos a classe MaxLengthTextDocument estendendo a PlainDocument. No atributo insertString inserimos uma regra onde, se a quantidade de caracteres inseridos for maior que o tamanho definido, a String será cortada.

Depois é só inserir a implementação no JTextField, desta forma:

	...
	MaxLengthTextDocument maxLength = new MaxLengthTextDocument();
	maxLength.setMaxChars(50);//Limitamos para 50 caracteres

	jTextField.setDocument(maxLength);
	...

E voilá!

Até mais!

21ago/091

JLabel com preenchimento (Padding)

Para adicionar preenchimento (padding) à um JLabel podemos usar as próprias bordas. Colocamos um EmptyBorder com o espaçamento que precisamos. Desta forma:

...
JLabel jLabel = new JLabel("Meu JLabel");
//Borda usada para o preenchimento
Border paddingBorder = BorderFactory.createEmptyBorder(10,10,10,10);

jLabel.setBorder(BorderFactory.createCompoundBorder(border,paddingBorder));
...

Neste caso colocamos um espaçamento de 10 pixels no topo, à esquerda, à direita e em baixo do JLabel respectivamente.

JLabel Padding

Se ainda quiser colocar uma borda envolta do JLabel, pode-se usar uma CompoundBorder, inserindo a borda e o preenchimento. Desta forma:

...
JLabel jLabel = new JLabel("Meu JLabel");
//Borda usada para o preenchimento
Border paddingBorder = BorderFactory.createEmptyBorder(10,10,10,10);
//Borda que ficará envolta do JLabel
Border border = BorderFactory.createLineBorder(Color.BLUE);

jLabel.setBorder(BorderFactory.createCompoundBorder(border,paddingBorder));
...

JLabel padding

Baixe o código fonte desta dica aqui.