【问题标题】:How to get text and respond to enter press on JFormattedTextField如何在 JFormattedTextField 上获取文本并响应输入
【发布时间】:2014-06-23 01:14:53
【问题描述】:

我最近在我的JFormattedTextField 课程中添加了一个MaskFormatter。以前ActionListener 响应代码并使用.getText() 方法获取文本工作正常。使用新的MaskFormatter 获取文本返回“”并且输入按键不起作用(ActionListener 停止响应该框)。

这是整个 JFormattedTextField 类:

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;
    }
}

【问题讨论】:

    标签: java swing actionlistener jformattedtextfield


    【解决方案1】:

    输入 3 位数字并按 Enter,它对我有用。

    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();
        }
    }
    

    【讨论】:

    • 一个FieldAction?我应该从哪里调用这个?
    • @Roboguy99 键入 123 并按 Enter。如果它不打印123,请检查您的控制台是否正常工作。
    • @Roboguy99 只需将其复制粘贴到一个单独的文件中并运行它。类名是任意的,随意命名。
    【解决方案2】:

    我想下面的代码可以为你工作。这样,每当你按下回车键,你就能看到输入的文字。

    addKeyListener(new KeyAdapter() {
            public void keyReleased(KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                     System.out.println(this.getText().trim());
                }
            }
        });
    

    【讨论】:

    • 不要使用KeyListeners这个,ActionListener是正确的方式,
    • 这给了我“新 KeyAdapter(){} 类型的方法 getText() 未定义”
    猜你喜欢
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多