Avatar billede funkyloonie Nybegynder
23. januar 2003 - 20:50 Der er 2 kommentarer og
2 løsninger

Antal tegn i JTextField

Er der en måde at bestemme max antal tegn i JTextField på? Min ide er at slippe for at skulle validere alle inputfelterne når der submittes ved at man kun kan indtaste et max antal tegn.
Avatar billede viht Nybegynder
23. januar 2003 - 23:28 #1
Det kan du sagtens:

import javax.swing.*;

import javax.swing.text.Document;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

import javax.swing.event.DocumentListener;
import javax.swing.event.DocumentEvent;

import java.awt.BorderLayout;

public class Test {
   
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setSize(300,300);
       
        final JLabel label = new JLabel("Antal tegn tastet: 0");
       
        // angiv max input længde i constructor til FixedSizeDocument
        JTextField textField = new JTextField(new FixedSizeDocument(10), "", 20);
        final Document document = textField.getDocument();
        textField.getDocument().addDocumentListener(new DocumentListener() {
            public void changedUpdate(DocumentEvent e) {
                updateLength(document);
            }
            public void insertUpdate(DocumentEvent e) {
                updateLength(document);
            }
        public void removeUpdate(DocumentEvent e) {
                updateLength(document);
            }
            public void updateLength(Document document) {
                label.setText("Antal tegn tastet: "+document.getLength());
            }
        });
        JPanel panel = new JPanel();
        panel.add(textField);
       
        frame.getContentPane().add(label, BorderLayout.NORTH);
        frame.getContentPane().add(panel, BorderLayout.CENTER);
       
        frame.show();
    }
}

class FixedSizeDocument extends PlainDocument {

    private int limit;

    public FixedSizeDocument(int limit) {
        this.limit = limit;
    }

    public void insertString (int offs, String str, AttributeSet a) throws BadLocationException {
        if (getLength() + str.length() <= limit)
            super.insertString(offs, str, a);
    }
}
Avatar billede aslan Nybegynder
24. januar 2003 - 11:44 #2
Eller bare efter at have implementeret en Keylistener:

        if(e.getSource() == textField)
        {
            char knap = e.getKeyChar();
               
            if(textField.getText().length()<8)return;     
            else e.consume();
               
        }
Avatar billede funkyloonie Nybegynder
24. januar 2003 - 14:03 #3
viht>>dit eksempel virker fint.
aslan>>Hvordan vil hele din keylistener se ud? Jeg har tidligere leget med keylistener uden at være så glad for den. Hvilken af KeyListeners abstrakte metoder vil du sætte koden foroven ind i?
Avatar billede funkyloonie Nybegynder
24. januar 2003 - 14:12 #4
aslan har fået dit til at virke og jeg synes bedst om det. derofr er points fordelt således...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester