我正在尝试编写一个程序,用户可以输入数字而不是字母或符号。我有一个不可编辑的文本字段,因为我只想在文本字段中显示可接受的用户输入键。这是我的代码的基本结构。
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方法。
答案 0 :(得分:2)
使用JFormattedTextField
。您可以将MaskFormatter
设置为仅允许数字。
阅读How to Use Formatted Text Fields上Swing教程中的部分,了解更多信息和示例。