Java 禁用向JTextField输入一些符号

Java 禁用向JTextField输入一些符号,java,swing,Java,Swing,如何禁用除数字以外的任何符号输入到JTextField? 您还可以创建自己的格式进行自定义。答案是JFormattedTextField: 你可以用一个。使用a构造它,它将只接受数字 JFormattedTextField有一系列可配置选项,让您决定如何处理错误的输入。我建议看一下文档 您可以添加一个自定义的KeyListener,它可以截取笔划,并且不会向JTextField选项1)使用JFormattedTextField更改JTextField,如下所示: try { MaskFor

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


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

答案是
JFormattedTextField

你可以用一个。使用a构造它,它将只接受数字

JFormattedTextField
有一系列可配置选项,让您决定如何处理错误的输入。我建议看一下文档


您可以添加一个自定义的
KeyListener
,它可以截取笔划,并且不会向
JTextField

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

try {
   MaskFormatter mascara = new MaskFormatter("##.##");
   JFormattedTextField textField = new JFormattedTextField(mascara);
   textField.setValue(new Float("12.34"));
} catch (Exception e) {
   ...
}
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
      }
   }
});
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);
}
选项2)从键盘捕获用户输入,如下所示:

try {
   MaskFormatter mascara = new MaskFormatter("##.##");
   JFormattedTextField textField = new JFormattedTextField(mascara);
   textField.setValue(new Float("12.34"));
} catch (Exception e) {
   ...
}
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
      }
   }
});
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);
}
JTextField textField=新的JTextField(10);
addKeyListener(新的KeyAdapter(){
public void keyTyped(KeyEvent e){
char c=e.getKeyChar();
if((c<'0')| |(c>'9')&&(c!=KeyEvent.VK|u BACK_SPACE)){
e、 consume();//忽略事件
}
}
});

只需消耗所有不是数字的字符,如下所示:

try {
   MaskFormatter mascara = new MaskFormatter("##.##");
   JFormattedTextField textField = new JFormattedTextField(mascara);
   textField.setValue(new Float("12.34"));
} catch (Exception e) {
   ...
}
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
      }
   }
});
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);
}

为了更好的用户体验

其他人提到了使用JFormattedTextField或KeyListeners来防止输入无效数据,但从可用性的角度来看,我发现开始在字段中键入内容而什么都没有发生是非常烦人的


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

这对我很有效。看一看

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

  }

}
public void键类型化(KeyEvent e)
{
char c=e.getKeyChar();

如果(!((c>='0')&&(c)可能重复的可能重复听起来好像JSpinner可能是用户在此处实际需要的。当我使用keylisteners时,符号将出现在字段中,之后它将被删除。但我只希望符号出现,如果它是数字符号,如果您的侦听器使用
KeyEvent
,则字段将永远听不到就是这样。我看到dacwe添加了这样一个示例。它不会处理,例如,粘贴。它还相当依赖于PL&F如何实现
JTextField
——对于
JComboBox
(可能!)不起作用。