使用没有文本字段的键事件同时更新文本字段

时间:2014-06-09 04:11:44

标签: java swing jtextfield keylistener

我正在尝试编写一个程序,用户可以输入数字而不是字母或符号。我有一个不可编辑的文本字段,因为我只想在文本字段中显示可接受的用户输入键。这是我的代码的基本结构。

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

public class SampleProgram extends JFrame implements ActionListener, KeyListener
{
    private Container container;
    private JPanel panel;
    private JTextField textField;
    private JButton button;
    private String[] names = {"1", "2", "3", "4", "5", "6", "7", "8", "9"};

    public SampleProgram()
    {
        container = getContentPane();
        panel = new JPanel();

        textField = new JTextField();
        textField.setEditable(false);
        contain.add(textField);

        addKeyListener(this);

        button = new JButton("Some Action Button");
        button.addActionListener(this);
        panel.add(button);

        container.add(panel);

        setResizable(false);
        setVisible(true);
    }

    public void keyPressed(KeyEvent event) {}
    public void keyReleased(KeyEvent event) {}

    public void keyTyped(KeyEvent event)
    {
        String action = String.valueOf(event.getKeyChar());
        for (String s : names)
            if (action.equalsIgnoreCase(s))
            {
                someAction(action);
                return;
            }
    }

    public void actionPerformed(ActionEvent event)
    {
        String action = ((JButton)event.getSource()).getText();
        someAction(action);
    }

    private void someAction(String input)
    {
        textField.setText(input);
    }

}

这是我的代码的精简版本。我的ActionListener正在做它应该做的事情,但我的KeyListener根本不工作。我也尝试将KeyListener添加到textField,但这也不起作用。如何让我的程序读入用户密钥输入?为了弄清楚错误,我尝试在keyTyped方法中输入代码textField.setText(action),并且我了解到我的代码甚至没有输入keyTyped方法。

1 个答案:

答案 0 :(得分:2)

使用JFormattedTextField。您可以将MaskFormatter设置为仅允许数字。

阅读How to Use Formatted Text Fields上Swing教程中的部分,了解更多信息和示例。