[Resolvido] Limitar caracteres JTextArea

olá pessoal,

estou usando NetBeans 7.3 e estou tentando limitar o numero de caracteres de um jTextArea, estou usando a classe:

import javax.swing.text.*;

public class FixedLengthDocument extends PlainDocument
{
    private int iMaxLength;

    public FixedLengthDocument(int maxlen)
    {
        super();
        iMaxLength = maxlen;
    }

    @Override
    public void insertString(int offset, String str, AttributeSet attr)
            throws BadLocationException
    {
        if (str == null)
            return;

        if (iMaxLength <= 0)
        {
            super.insertString(offset, str, attr);
            return;
        }

        int ilen = (getLength() + str.length());
        if (ilen <= iMaxLength)
            super.insertString(offset, str, attr);
        else
        {
            if (getLength() == iMaxLength)
                return;
            String newStr = str.substring(0, (iMaxLength - getLength()));

            super.insertString(offset, newStr, attr);
        }
    }
}

e estou chamando desta forma:

TextMensagem.setDocument(new FixedLengthDocument(200));

porem ele sublinha o [color=blue]new[/color] FixedLengthDocument(200) em vermelho indicando erro
e pede para converter o metodo em Document, e quando eu converto, da o seguinte erro:

Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedOperationException: Not supported yet.
	at Projetos.FixedLengthDocument.<init>(FixedLengthDocument.java:14)
	at Projetos.ControleDeEstoque.<init>(ControleDeEstoque.java:91)
	at Projetos.LoginControleDeEstoque.Logar(LoginControleDeEstoque.java:208)
	at Projetos.LoginControleDeEstoque$5.keyPressed(LoginControleDeEstoque.java:190)
	at java.awt.Component.processKeyEvent(Component.java:6463)
	at javax.swing.JComponent.processKeyEvent(JComponent.java:2829)
	at java.awt.Component.processEvent(Component.java:6282)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1895)
	at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:762)
	at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1027)
	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:899)
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:727)
	at java.awt.Component.dispatchEventImpl(Component.java:4731)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Window.dispatchEventImpl(Window.java:2719)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:688)
	at java.awt.EventQueue$3.run(EventQueue.java:686)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:702)
	at java.awt.EventQueue$4.run(EventQueue.java:700)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

alguem sabe qual o problema ?

agradeço desde já

consegui tirar o erro

porem quando eu digito alguma coisa no jTextArea não aparece nada

ve se ajuda -> http://www.guj.com.br/articles/29

abraços

ja vi este artigo, obrigado

mas quando eu digito nao aparece nada no jTextArea

[quote=yfalbino]ja vi este artigo, obrigado

mas quando eu digito nao aparece nada no jTextArea[/quote]

hmm, fiz uns testes aqui e deu certo. Acho que vc está com o size da tela menor que o JTextArea que está criando.

Eu apenas segui o exemplo do artigo.

[code]import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class FixedLengthDocument extends PlainDocument {
private final int iMaxLength;

public FixedLengthDocument(final int maxlen) {
    super();
    this.iMaxLength = maxlen;
}

@Override
public void insertString(final int offset, final String str, final AttributeSet attr) throws BadLocationException {
    if (str == null) {
        return;
    }

    if (this.iMaxLength <= 0) // aceitara qualquer no. de caracteres  
    {
        super.insertString(offset, str, attr);
        return;
    }

    final int ilen = this.getLength() + str.length();
    if (ilen <= this.iMaxLength) {
        super.insertString(offset, str, attr); // ...aceita str  
    } else {
        if (this.getLength() == this.iMaxLength) {
            return; // nada a fazer
        }
        final String newStr = str.substring(0, this.iMaxLength - this.getLength());

        super.insertString(offset, newStr, attr);
    }
}

}
[/code]

Classe teste, Obs: está limitando para 5 caracteres.

[code]/* Teste.java */

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JTextArea;

public class Teste {
public static void main(final String[] args) {
final JFrame f = new TesteFrame();
f.setVisible(true);
}
}

class TesteFrame extends JFrame {
private final JTextArea txtExemplo;

public TesteFrame() {
    this.setTitle("Exemplo");
    this.setSize(230, 200);

    this.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(final WindowEvent e) {
            System.exit(0);
        }
    }); // nao por nada, mas adoro classes internas...

    /* o codigo que interessa esta abaixo */
    this.txtExemplo = new JTextArea(10, 15); 

    this.txtExemplo.setDocument(new FixedLengthDocument(5));
    /* isso, agora sim, teremos um JTextField que aceitará
       no máximo 5 caracteres
    */

    this.getContentPane().add(this.txtExemplo, "South");
}

}
[/code]

espero ter ajudado.
Bons estudos

muito Obrigado, ajudou sim

no artigo, esta linha estava errada:

if (s == null)

eu so troquei o ‘s’ por ‘str’ e funcionou perfeitamente

ai ficou assim:

if (str == null)