• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Baderous

Limitar nº caracteres numa jTextField

3 mensagens neste tópico

Estou a trabalhar pela 1ª vez com interfaces gráficas no NetBeans.

Tenho de limitar o nº de caracteres que se podem inserir numa jTextField a um determinado valor, suponhamos 10.

Já coloquei a jTextField na jFrame, e quando faço duplo click sobre a mesma e aparece:

private void cenasActionPerformed(java.awt.event.ActionEvent evt) {                                            
// TODO add your handling code here:
}

Ora, eu sei que tenho de ter um evento que me alerte sempre que uma tecla é pressionada, para que, nesse momento, seja calculado o tamanho da string existente, e retirado da string o excesso. Sei que isso é feito através do KeyTyped, porque já andei no Google.

Mas não sei como é que meto o código para fazer isso dentro do ActionPerformed(...). Já defini um método KeyTyped, mas não sei como passo um evento correspondente ao pressionar de tecla a este método dentro do ActionPerformed.

Alguém me pode dizer como se faz isso?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um actionPerformed é um evento executado quando alguém carrega no enter dentro da caixa de texto.

Se fores à janela de propriedades, normalmente aparece na lateral direita, tens uma secção para eventos, tens lá os eventos que podes registar para a caixa de texto.

Outra forma é clicares com o botão direito do rato na caixa de texto, Action > Key > *

Não sei se será importante para o que queres fazer mas por vezes os eventos do documento que está dentro da caixa de texto são mais úteis, podes adicioná-los colocando o seguinte código na Frame que tem a caixa de texto, um bom sítio será depois do método de iniciação dos componentes gráficos, dentro do construtor.

jtextfield.getDocument().addDocumentListener(new DocumentListener() {

    public void insertUpdate(DocumentEvent e) {
        //action
    }

    public void removeUpdate(DocumentEvent e) {
        //action
    }

    public void changedUpdate(DocumentEvent e) {
        //action
    }
});

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Baderous já descobri  :)

import javax.swing.text.*;

public class JTextFieldLimit extends PlainDocument {
    private int limit;
    // optional uppercase conversion
    private boolean toUppercase = false;
    
    JTextFieldLimit(int limit) {
        super();
        this.limit = limit;
    }
    
    JTextFieldLimit(int limit, boolean upper) {
        super();
        this.limit = limit;
        toUppercase = upper;
    }
    
    public void insertString
            (int offset, String  str, AttributeSet attr)
            throws BadLocationException {
        if (str == null) return;
        
        if ((getLength() + str.length()) <= limit) {
            if (toUppercase) str = str.toUpperCase();
            super.insertString(offset, str, attr);
        }
    }
}

import java.awt.*;
import javax.swing.*;

public class tswing extends JApplet{
    JTextField textfield1;
    JLabel label1;
    
    public void init() {
        getContentPane().setLayout(new FlowLayout());
        //
        label1 = new JLabel("max 10 chars");
        textfield1 = new JTextField(15);
        getContentPane().add(label1);
        getContentPane().add(textfield1);
        textfield1.setDocument
                (new JTextFieldLimit(10));
    }
}

EDIT: btw, 1st post :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora