Java 如何限制jtextfield只接受小于10的数字?

Java 如何限制jtextfield只接受小于10的数字?,java,swing,jtextfield,restrictions,Java,Swing,Jtextfield,Restrictions,如何限制jtextfield只接受小于10的数字,不接受单词、空格或任何其他特殊字符 使用Swing Javabuilders,在这里您可以在YML(如下)中定义GUI,包括文本字段验证 在gui中的yaml文件中声明,下面是Person.java的示例,称为Person.yaml: JFrame(name=frame, title=frame.title, size=packed, defaultCloseOperation=exitOnClose): - JButton(na

如何限制jtextfield只接受小于10的数字,不接受单词、空格或任何其他特殊字符

使用Swing Javabuilders,在这里您可以在YML(如下)中定义GUI,包括文本字段验证

在gui中的yaml文件中声明,下面是Person.java的示例,称为Person.yaml:

JFrame(name=frame, title=frame.title, size=packed, defaultCloseOperation=exitOnClose):
        - JButton(name=save, text=button.save, onAction=[$validate,save,done])
        - JButton(name=cancel, text=button.cancel, onAction=[$confirm,cancel])
        - MigLayout: |
              [pref]              [grow,100]     [pref]             [grow,100]
              "label.firstName"   txtFirstName   "label.lastName"   txtLastName
              "label.email"       txtEmail+*
              >save+*=1,cancel=1
    bind:
        - txtFirstName.text: person.firstName
        - txtLastName.text: person.lastName
        - txtEmail.text: person.emailAddress
    validate:
        - txtFirstName.text: {mandatory: true, label: label.firstName}
        - txtLastName.text: {mandatory: true, label: label.lastName}
        - txtEmail.text: {mandatory: true, emailAddress: true, label: label.email}
上述三个模块如下所示:

Swing类(JFrame和JButton)以及布局管理器,带有嵌入的JLabel(
label.firstName
label.lastName
),它们由声明的“label”部分和JTextFields(
txtLastName
txtLastName
txtmail
)识别通过名称的txt部分识别

数据绑定:这将
JTextArea.text
绑定到
class.fieldName
,以便在将数据输入JTextField时将其映射到字段

验证:这里是验证文本的地方。请注意,名为Save的
JButton
onAction
部分中有一个条目
$validate
,它运行内置的validate方法。这将从验证块中读取中的验证类型:

 txtFirstName.text: {mandatory: true, label: label.firstName}
声明必须填写字段(
mandatory:true
),并且
txtEmail
必须填写有效的电子邮件地址(
emailAddress:true
)。下文概述了更多验证

一旦声明了GUI,就可以从java文件中像这样运行它

    private BuildResult result;
    .....
    public methodName(){
        .....
    result = SwingJavaBuilder.build(this).setVisible(true);
    }
这个方法(
build(This)
)引用了一个同名的.yml文件(因此您的gui是person.yml,并且与person.java成对出现)

文档中提供了更多验证:

validate:
      - mandatory.text: {label: Mandatory Field, mandatory: true}
      - date.text: {label: Date Field, dateFormat: "yyyy/mm/dd"}
      - email.text: {label: E-Mail, email: true}
      - minmax.text: {label: Min/Max Length, minLength: 5, maxLength: 10}
      - regex.text: {label: Regex, regex: "[a-zA-Z0-9]+"}
      - regex2.text: {label: Regex, regex: "[a-zA-Z0-9]+", 
               regexMessage: "''{0}'' must be a number or letter"}
      - long.text: {label: Min/Max Long, minValue: 5, maxValue: 50, mandatory: true}
因此,您希望将最后一个
long.text
用于此规范:

myValidNumberField{label: Number less than ten, maxValue: 10, mandatory: true}`

页面上有更多关于如下设置GUI的信息

使用Swing Javabuilders,在这里您可以在YML(如下)中定义GUI,包括文本字段验证

在gui中的yaml文件中声明,下面是Person.java的示例,称为Person.yaml:

JFrame(name=frame, title=frame.title, size=packed, defaultCloseOperation=exitOnClose):
        - JButton(name=save, text=button.save, onAction=[$validate,save,done])
        - JButton(name=cancel, text=button.cancel, onAction=[$confirm,cancel])
        - MigLayout: |
              [pref]              [grow,100]     [pref]             [grow,100]
              "label.firstName"   txtFirstName   "label.lastName"   txtLastName
              "label.email"       txtEmail+*
              >save+*=1,cancel=1
    bind:
        - txtFirstName.text: person.firstName
        - txtLastName.text: person.lastName
        - txtEmail.text: person.emailAddress
    validate:
        - txtFirstName.text: {mandatory: true, label: label.firstName}
        - txtLastName.text: {mandatory: true, label: label.lastName}
        - txtEmail.text: {mandatory: true, emailAddress: true, label: label.email}
上述三个模块如下所示:

Swing类(JFrame和JButton)以及布局管理器,带有嵌入的JLabel(
label.firstName
label.lastName
),它们由声明的“label”部分和JTextFields(
txtLastName
txtLastName
txtmail
)识别通过名称的txt部分识别

数据绑定:这将
JTextArea.text
绑定到
class.fieldName
,以便在将数据输入JTextField时将其映射到字段

验证:这里是验证文本的地方。请注意,名为Save的
JButton
onAction
部分中有一个条目
$validate
,它运行内置的validate方法。这将从验证块中读取中的验证类型:

 txtFirstName.text: {mandatory: true, label: label.firstName}
声明必须填写字段(
mandatory:true
),并且
txtEmail
必须填写有效的电子邮件地址(
emailAddress:true
)。下文概述了更多验证

一旦声明了GUI,就可以从java文件中像这样运行它

    private BuildResult result;
    .....
    public methodName(){
        .....
    result = SwingJavaBuilder.build(this).setVisible(true);
    }
这个方法(
build(This)
)引用了一个同名的.yml文件(因此您的gui是person.yml,并且与person.java成对出现)

文档中提供了更多验证:

validate:
      - mandatory.text: {label: Mandatory Field, mandatory: true}
      - date.text: {label: Date Field, dateFormat: "yyyy/mm/dd"}
      - email.text: {label: E-Mail, email: true}
      - minmax.text: {label: Min/Max Length, minLength: 5, maxLength: 10}
      - regex.text: {label: Regex, regex: "[a-zA-Z0-9]+"}
      - regex2.text: {label: Regex, regex: "[a-zA-Z0-9]+", 
               regexMessage: "''{0}'' must be a number or letter"}
      - long.text: {label: Min/Max Long, minValue: 5, maxValue: 50, mandatory: true}
因此,您希望将最后一个
long.text
用于此规范:

myValidNumberField{label: Number less than ten, maxValue: 10, mandatory: true}`
页面上有更多关于如下设置GUI的信息

试试这个:-

JTextField textField = new JTextField();

textField.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent evt) {
         //do stuff here when enter pressed
        String text = textField.getText();
        if(text!=null && !text.equals("")){
            char c = evt.getKeyChar();
            int val=Integer.parseInt(c);
            if(val>=48 && val<=57){
                if(Integer.parseInt(text)<=10){
                    //Its valid and allowed
                }else{
                    //Its invalid, show error message here
                }
            }else{
                //Show message only numbers are allowed
                return false;
            }           
        }

    }
});
JTextField textField=新的JTextField();
addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件evt){
//按enter键时在此处执行操作
String text=textField.getText();
if(text!=null&&!text.equals(“”){
char c=evt.getKeyChar();
int val=Integer.parseInt(c);
如果(val>=48&&val请尝试以下操作:-

JTextField textField = new JTextField();

textField.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent evt) {
         //do stuff here when enter pressed
        String text = textField.getText();
        if(text!=null && !text.equals("")){
            char c = evt.getKeyChar();
            int val=Integer.parseInt(c);
            if(val>=48 && val<=57){
                if(Integer.parseInt(text)<=10){
                    //Its valid and allowed
                }else{
                    //Its invalid, show error message here
                }
            }else{
                //Show message only numbers are allowed
                return false;
            }           
        }

    }
});
JTextField textField=新的JTextField();
addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件evt){
//按enter键时在此处执行操作
String text=textField.getText();
if(text!=null&&!text.equals(“”){
char c=evt.getKeyChar();
int val=Integer.parseInt(c);

如果(val>=48&&val,则DocumentFilter是解决此问题的一种方法:

import javax.swing.*;
import javax.swing.text.*;

@SuppressWarnings("serial")
public class DocFilterExample extends JPanel{
   JTextField textfield = new JTextField(5);

   public DocFilterExample() {
      PlainDocument doc = (PlainDocument) textfield.getDocument();
      doc.setDocumentFilter(new MaxNumberDocFilter(10));

      add(textfield);
   }

   private class MaxNumberDocFilter extends DocumentFilter {
      private int maxNumber;

      public MaxNumberDocFilter(int maxnumber) {
         this.maxNumber = maxnumber;
      }

      private boolean verifyText(String text) {
         if (text.isEmpty()) {
            return true; // allow for a blank text field
         }
         int value = 0;
         try {
            value = Integer.parseInt(text);
            if (value >= 0 && value < maxNumber) {
               return true; // if it's a number in range, it passes
            }
         } catch (NumberFormatException e) {
            return false;  // if it's not a number, it fails.
         }
         return false;
      }

      @Override
      public void insertString(FilterBypass fb, int offset, String string,
               AttributeSet attr) throws BadLocationException {

         Document doc = fb.getDocument();
         String oldText = doc.getText(0, doc.getLength());
         StringBuilder sb = new StringBuilder(oldText);
         sb.insert(offset, string);

         if (verifyText(sb.toString())) {
            super.insertString(fb, offset, string, attr);
         }

      }

      @Override
      public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs)
               throws BadLocationException {
         Document doc = fb.getDocument();
         String oldText = doc.getText(0, doc.getLength());
         StringBuilder sb = new StringBuilder(oldText);

         sb.replace(offset, offset + length, text);
         if (verifyText(sb.toString())) {
            super.replace(fb, offset, length, text, attrs);
         }
      }

      @Override
      public void remove(FilterBypass fb, int offset, int length) throws BadLocationException {
         Document doc = fb.getDocument();
         String oldText = doc.getText(0, doc.getLength());
         StringBuilder sb = new StringBuilder(oldText);

         sb.replace(offset, offset + length, "");

         if (verifyText(sb.toString())) {
            super.remove(fb, offset, length);            
         }
      }
   }

   private static void createAndShowUI() {
      JFrame frame = new JFrame("Eg");
      frame.getContentPane().add(new DocFilterExample());
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      java.awt.EventQueue.invokeLater(new Runnable() {
         public void run() {
            createAndShowUI();
         }
      });
   }
}
import javax.swing.*;
导入javax.swing.text.*;
@抑制警告(“串行”)
公共类DocFilterExample扩展了JPanel{
JTextField textfield=新的JTextField(5);
公共文档过滤器示例(){
PlainDocument文档=(PlainDocument)textfield.getDocument();
doc.setDocumentFilter(新的MaxNumberDocFilter(10));
添加(文本字段);
}
私有类MaxNumberDocFilter扩展了DocumentFilter{
私有整数maxNumber;
公共MaxNumberDocFilter(整数maxnumber){
this.maxNumber=maxNumber;
}
专用布尔验证文本(字符串文本){
if(text.isEmpty()){
返回true;//允许空白文本字段
}
int值=0;
试一试{
value=Integer.parseInt(文本);
如果(值>=0&&value