Oi Galera, como eu faço para limitar o número de caracteres de um JTextArea?
Valeu
Abs.
Oi Galera, como eu faço para limitar o número de caracteres de um JTextArea?
Valeu
Abs.
Ja tentou implementar uma action listener com um keyEvent?
Ainda não.
Como eu limitaria o JTextArea implementando isso?
Não é tão simples como parece. No KeyListener, você ainda teria problemas com copy&paste.
Ainda bem que o GUJ tem este tutorial que te explica como fazer isso usando a interface Document.
O Vini tem razão, possui essa falha mesmo, mas se quiser o código é só procurar por KeyEvent, ai quando ele digitar vc faz um getText e verifica por lenght();
Pois é, o java devia ter esse recurso como padrão. Nem que fosse já fornecendo um documento pronto, só para isso. Não é à toa que citei isso nas coisas que odeio em java.
Pessoal, não estou conseguindo, desculpem a minha ignorância. Segue o código: criei uma classe limitador:
[code]import javax.swing.;
import javax.swing.text.;
public class Limitador extends PlainDocument
{
private int iMaxLength;
private Object s;
public Limitador(int maxlen) {
super();
iMaxLength = maxlen;
}
public void insertString(int offset, String str, AttributeSet attr)
throws BadLocationException {
if (s == null) return;
if (iMaxLength <= 0) // aceitara qualquer no. de caracteres
{
super.insertString(offset, str, attr);
return;
}
int ilen = (getLength() + str.length());
if (ilen <= iMaxLength) // se o comprimento final for menor...
super.insertString(offset, str, attr); // ...aceita str
else
{
if (getLength() == iMaxLength) return; // nada a fazer
String newStr = str.substring(0, (iMaxLength - getLength()));
super.insertString(offset, newStr, attr);
}
}
}[/code]
Depois usei esta classe no programa:
[code]
private JTextArea getJTextArea_Pergunta() {
if (jTextArea_Pergunta == null) {
jTextArea_Pergunta = new JTextArea();
jTextArea_Pergunta.setBounds(new Rectangle(151, 100, 170, 20));
jTextArea_Pergunta.setPreferredSize(new Dimension(0, 16));
jTextArea_Pergunta.setDocument(new Limitador(10));
//jTextArea_Pergunta.setText("");
}
return jTextArea_Pergunta;
}[/code]
Vcs podem me ajudar?
Valeu.
ABS
Essa aqui me foi dado por um usuario do GUJ, é de JTextField, mas pode te ajudar
[code]import javax.swing.JTextField;
import java.awt.event.*;
public class LimitedTextField extends JTextField{
private byte maxLength=0;
public LimitedTextField(int maxLength){
super();
this.maxLength = (byte)maxLength;
this.addKeyListener(new LimitedKeyListener());
}
public void setMaxLength(int maxLength){
this.maxLength= (byte)maxLength;
update();
}
private void update(){
if (getText().length()>maxLength){
setText(getText().substring(0,maxLength));
setCaretPosition(maxLength);
}
}
public void setText(String arg0){
super.setText(arg0);
update();
}
public void paste(){
super.paste();
update();
}
//Classes Internas
private class LimitedKeyListener extends KeyAdapter{
private boolean backspace= false;
public void keyPressed(KeyEvent e){
backspace=(e.getKeyCode()==8);
}
public void keyTyped(KeyEvent e){
if ( !backspace &&
getText().length()>maxLength-1){
e.consume();
}
}
}
}[/code]
Bom dia.
Então kra, esse código não funcionou, está com erro. Vc acredita que até agora não consegui limitar o numero de caracteres de um textarea?
Se vc tiver mais algum exemplo, eu agradeço.
Abs.
Foi só seguir o tutorial…
Segue anexo o exemplo…
Vini,
Funcionou perfeitamente.
Valeu Kra, te devo essa.
Abraços.
Bom, com erro o código não está, se vc jogá-lo dentro de uma classe ele não vai dar nenhum erro de compilação…
para chama-lo vc faz assim
LimitedTextField campo = new LimitedTextField(10)//10 é um int qualquer
e funciona.
Para TextArea muda o nome, o extends e o construtor q deve funcionar, é só se basear no construtor da própria JTextArea.
Ai pra chamar faz assim
LimitedTextArea area = new LimitedTextArea(int, int, int);
por favor como eu chamo eu instancio esse classe no JFrame meu, em qual evento???
OBS: Não estou criando o jframe dinamico, estou usando a interface do netbeans, os componentes ja estao todos la. Eu quero fazer com que a classe seja setada para os componentes.
Ja tentei de tudo e nao to conseguindo, nao acontece nada.
Começando em java agora, com vontade de continuar mas ta dificil…
[quote=ViniGodoy]Foi só seguir o tutorial…
Segue anexo o exemplo…[/quote]
Olá,
Quando precisei limitar a quantidade de caracteres, utilizei jFormattedTextField e maskFormatter.
Talvez seja meio gambiarra, mas ao menos foi bem simples.
Exemplo, máximo 30 caracteres:
private void jFormattedTextField1FocusGained(java.awt.event.FocusEvent evt) {
MaskFormatter mask = new MaskFormatter();
try {
mask.setMask("******************************");
mask.install(jFormattedTextField1);
} catch (ParseException ex) {
Logger.getLogger(CadastroPessoa.class.getName()).log(Level.SEVERE, null, ex);
}
}
Att.,