qrdPJ
Abril 6, 2005, 12:44pm
#1
Prezados Companheiros:
Gostaria de saber se é possível limitar o tamanho de um JTextField em relação a qtade de caracteres:
num1 = new JTextField( 10);
onde o 10 representa a largura (de caracteres) do meu JTextField.
É possivel definir que seja possível digitar apenas 5 caracteres neste JTextField ?
Obrigados a todos
o unico metodo que conheco (e inclusive já usei) é uma gambiarrazinha… =P
voce pode adicionar um key listener ao textfield, e ler o tamanho do texto nele a cada tecla pressionada:
textField.addKeyListener(new KeyAdapter()
{
public void keyTyped(KeyEvent ke) {
JTextField fonte =(JTextField) ke.getSource();
int tamanho = fonte.getText().length();
if(tamanho + 1 > 5) {
fonte.setText(fonte.getText().substring(0, 4));
}
}
});
voce vai reparar que o texto que é “pego” dentro do metodo keyTyped é sempre anterior ao texto atual(com o caractere que provocou o evento), por isso coloquei esse “+ 1”. mas aí você usa do jeito que for melhor pra voce…
espero ter ajudado
Qrd…
Vc pode descer o nivel ate o Model do TextField, tive problema semelhante que foi resolvido trabalhando com o PlainDocument…
Ai vai um exemplo:
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.*;
import javax.swing.text.PlainDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
/**
* Exemplo de Text
*/
public class Teste extends JFrame{
public Teste() {
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
this.setSize(50,100);
this.setVisible(true);
}
public static void main(String[] args) {
Teste teste = new Teste();
}
private void jbInit() throws Exception {
NovoPlainDocument plainDocument = new NovoPlainDocument();
plainDocument.setColunas(10);
jTextField1.setDocument(plainDocument);
this.getContentPane().add(jTextField1, java.awt.BorderLayout.CENTER);
}
private JTextField jTextField1 = new JTextField();
}
/**
* Classe que herda o PlainDocument
*/
class NovoPlainDocument extends PlainDocument{
private int colunas=-1;
//metodo sobreescrito do plaindocument
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
if(getLength()<colunas){
super.insertString(offs,str,a);
}
return;
}
public void setColunas(int colunas){
this.colunas=colunas;
}
public int getColunas(){
return colunas;
}
}
Espero que ajude abraços…