Avatar billede Hetz Nybegynder
05. december 2010 - 19:58 Der er 6 kommentarer

JTextField live update (Undgå enter)

Hej eksperter,

Er det muligt at lave live-update af et JTextField? Jeg vil gerne undgå, at man skal taste enter for at få den til at opdatere mit private field, som holder en int, der modtages fra JTextField.

Mvh. Janus
Avatar billede arne_v Ekspert
05. december 2010 - 20:04 #1
Hm. Normalt indtaster man ikke enter i et JTextField. Og hvis man laver Integer.parseInt(dittextfield.getText()) s¨bør man altid få nuværende værdi.

Men er dit problem at du gerne vil have din int løbende opdateret automatisk *uden* at du skal gøre noget?
Avatar billede Hetz Nybegynder
05. december 2010 - 20:26 #2
Lige præcis: Jeg vil gerne have, at mit field får parset en int ved hvert keystroke - det er i mit program ikke hensigtmæssigt, at man skal trykke enter før fieldet opdateres.
Avatar billede arne_v Ekspert
05. december 2010 - 20:41 #3
Hvis du sætter en action listener med dittextfield.addActionListener bliver den så ikke kaldt ved ændring?
Avatar billede Hetz Nybegynder
05. december 2010 - 21:03 #4
Nej, det er netop dét, der er problemet: Ændringen registreres som default kun, når der tastes enter :-(.
Avatar billede arne_v Ekspert
05. december 2010 - 21:46 #5
Prøv med en DocumentListener i.s.f.!

Demo:

package november;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

public class TFU extends JFrame {
    private JTextField tf;
    public TFU() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("Text field update");
        getContentPane().setLayout(new BorderLayout());
        tf = new JTextField();
        tf.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("AL: " + tf.getText());
            }
        });
        tf.getDocument().addDocumentListener(new DocumentListener() {
            public void insertUpdate(DocumentEvent e) {
                System.out.println("DL ins: " + tf.getText());
            }
            public void removeUpdate(DocumentEvent e) {
                System.out.println("DL rem: " + tf.getText());
            }
            public void changedUpdate(DocumentEvent e) {
                System.out.println("DL chg: " + tf.getText());
            }
        });
        getContentPane().add(tf, BorderLayout.CENTER);
        pack();
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame f = new TFU();
                f.setVisible(true);
            }
        });
    }
}
Avatar billede arne_v Ekspert
26. december 2010 - 23:41 #6
OK ?
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