Para quem conhece o netbeans

7 respostas
karh-el

Usei aquele assistente de interface do netbeans onde é só puxar um botaozinho e pronto.
Pois bem, criei um formulário JFrame, arrastei um JTextField e agora quero saber como faço para colocar um objeto dessa
classe para limitar o número de caracteres do textField.

import javax.swing.text.*;

/**
 *
 * @author Administrador
 */
public class LimitaTextField extends PlainDocument{

    private int iMaxLength;

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

    @Override
       public void insertString(int offset, String str, AttributeSet attr)
                       throws BadLocationException {
           if (str == 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
     }
}

/* Como usar:
 *  JTextField texto=new JTextField(10); (10 colunas)
 *  text.setDocument(new LimitaTextField(5)); (limite de caracteres)
 *
 *
 */

7 Respostas

J

você terá que usar um JFormattedTextField para fazer isso e criar um máscara para limitar ou até mesmo adequar a forma de dígitos.

esse método que eu uso é que define a máscara para o JFormattedTextField

public static DefaultFormatterFactory maskvalor(String mask){
   MaskFormatter cmFoco = null;

   try{
       cmFoco = new MaskFormatter(mask);
   }catch(Exception e){

   }
   DefaultFormatterFactory factory = new DefaultFormatterFactory(cmFoco,cmFoco);
   return factory;

}

karh-el

Se eu usar um JFormattedTextField serei obricado apreenchar todo campo e não é isso que eu quero.
Quero que meu campo de Texto aceita até, por exemplo, 7 caracteres.
outra coisa: Como faço para deixar o código java no formato que vejo no guj (public azul, string verde, etc)?

brunorota

Quando vc vai digitar tem uns botaõzinhos em cima da caixa de texto, tem um q chama CODE, vc clica nele para abrir a formatação e clica depois do text para fechar

R

Para limitar o máximo de caracteres num JTextField você terá de mudar o Document contido no JTextField, segue abaixo um exemplo de como fazer isso:

http://www.exampledepot.com/egs/javax.swing.text/LimitText.html

Para mudar as cores dos elementos do código-fonte no NetBeans, use o menu Tools -> Options, e em seguida entre na seção Fonts & Colors.

eliangela

Faz o seguinte...

Usa esta classe:
public class DocumentoTamanhoFixo extends PlainDocument {
    private static final long serialVersionUID = -5066124721357390024L;

    private int iMaxLength;

    public DocumentoTamanhoFixo(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, no construtor do seu JFrame, depois do método initComponents() que o netbeans gera, vc coloca:

seuTextField.setDocument(new DocumentoTamanhoFixo(tamanhoQueVoceQuer));

Vê se funciona e me dá uma resposta :wink:

karh-el

Valeu pela ajuda.

eliangela

:wink:

Criado 3 de junho de 2009
Ultima resposta 10 de jun. de 2009
Respostas 7
Participantes 5