禁用向JTextField输入一些符号

时间:2011-02-01 14:37:07

标签: java swing

如何禁用除JTextField的数字以外的任何符号输入?

7 个答案:

答案 0 :(得分:20)

选项1)使用JFormattedTextField更改您的JTextField,如下所示:

try {
   MaskFormatter mascara = new MaskFormatter("##.##");
   JFormattedTextField textField = new JFormattedTextField(mascara);
   textField.setValue(new Float("12.34"));
} catch (Exception e) {
   ...
}

选项2)从键盘捕获用户的输入,如下所示:

JTextField textField = new JTextField(10);
textField.addKeyListener(new KeyAdapter() {
   public void keyTyped(KeyEvent e) {
      char c = e.getKeyChar();
      if ( ((c < '0') || (c > '9')) && (c != KeyEvent.VK_BACK_SPACE)) {
         e.consume();  // ignore event
      }
   }
});

答案 1 :(得分:7)

答案是JFormattedTextFieldSee my answer on this duplicate question

  

您可以使用JFormattedTextField。使用NumberFormatter构造它,它只接受数字。

     

JFormattedTextField有一堆可配置选项,可让您决定输入的错误处理方式。我建议查看文档。

答案 2 :(得分:3)

只需使用不是这样的数字的所有字符:

public static void main(String[] args) {
    JFrame frame = new JFrame("Test");

    frame.add(new JTextField() {{
        addKeyListener(new KeyAdapter() {
            public void keyTyped(KeyEvent e) {
                if (!Character.isDigit(e.getKeyChar()))
                    e.consume();
            }
        });
    }});

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 300);
    frame.setVisible(true);
}

答案 3 :(得分:2)

How to Use Formatted Text Fields

 amountField = new JFormattedTextField(NumberFormat.getIntegerInstance());

您还可以创建自己的格式进行自定义。

答案 4 :(得分:2)

为了更好的用户体验

其他人已经提到使用JFormattedTextField或KeyListeners来防止输入无效数据,但从可用性的角度来看,我发现开始输入字段并且没有任何反应非常烦人。

为了提供更好的用户体验,您可以允许用户在字段中输入非数字值,但使用验证器向用户提供反馈并禁用提交按钮。

答案 5 :(得分:0)

您可以添加拦截击键的自定义KeyListener,但不会将无效的击键传播到JTextField

答案 6 :(得分:0)

这对我有用。看看。

public void keyTyped(KeyEvent e)
{

  char c = e.getKeyChar();

  if (!((c >= '0') && (c <= '9') ||    
     (c == KeyEvent.VK_BACK_SPACE) ||
     (c == KeyEvent.VK_DELETE))) {

        getToolkit().beep();

        e.consume();

  }

}