Question

I recently added a MaskFormatter to my JFormattedTextField class. Previously an ActionListener was responding to the code and getting the text using the .getText() method worked fine. With the new MaskFormatter getting the text returns " " and enter presses don't work (the ActionListener stopped responding to the box).

Here is the entire JFormattedTextField class:

package swing;

import game.Main;
import java.awt.Font;
import javax.swing.JFormattedTextField;
import javax.swing.text.MaskFormatter;
import window.Listener;

@SuppressWarnings("serial")
public class TextField extends JFormattedTextField
    {
    public TextField(int size, String text) 
       //TODO limit to number input and 3 character input only
    {
        super(createFormatter());

        Font font = new Font("AGENCY FB", Font.BOLD, 30);

        this.setFont(font);
        this.setColumns(size);
        this.setSize(100, 100);
        this.setText(text);
    }

    private static MaskFormatter createFormatter()
    {
        MaskFormatter formatter = null;
        try 
        {
            formatter = new MaskFormatter("###");
        } 
        catch (java.text.ParseException exc) 
        {
            System.err.println("formatter is bad: " + exc.getMessage());
            System.exit(-1);
        }
        return formatter;
    }
}
Était-ce utile?

La solution

Type 3 digits and press Enter, it works for me.

public class FieldAction extends JFrame {

    FieldAction() {

        MaskFormatter mask = null;
        try {
            mask = new MaskFormatter("###");
        } catch (ParseException e) {
            e.printStackTrace();
        }
        final JFormattedTextField textField = new JFormattedTextField(mask);
        textField.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                System.out.println(textField.getText());
            }
        });

        add(textField, BorderLayout.CENTER);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {

        new FieldAction();
    }
}

Autres conseils

I guess the code below can work for you. This way, whenever you press an enter, you will be able to see the inputted text.

addKeyListener(new KeyAdapter() {
        public void keyReleased(KeyEvent evt) {
            if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                 System.out.println(this.getText().trim());
            }
        }
    });
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top