java:判断在JTextField中输入的是不是是7位数字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java:判断在JTextField中输入的是不是是7位数字相关的知识,希望对你有一定的参考价值。

textField_1=newJTextField();
// 方法1
if(textField_1.getText().length()!=7&&textField_1.getText().matches("\\d*"))
JOptionPane.showMessageDialog(null,"请输入7位数字",
null, JOptionPane.ERROR_MESSAGE);
// 方法2
public boolean isSevenDigits(String str)
if(str.length()!=7)
return false;
if(Pattern.compile("[0-9]*").matcher(str).matches())
return false;
/*或者
for (inti = 0; i < str.length(); i++)
if (!Character.isDigit(str.charAt(i)))
return false;
*/
return true;

尝试以上方法,都未成功,请问是何原因?

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class JTFDemo extends JFrame
    public static void main(String[] args)
        new JTFDemo();
    
    public JTFDemo()
        this.setSize(600, 450);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        initPanel();
        this.setVisible(true);
    
    private void initPanel()
        this.setLayout(new FlowLayout(FlowLayout.CENTER, 40, 40));
        final JTextField textField = new JTextField(20);
        JButton button = new JButton("提交");
        button.addActionListener(new ActionListener()
            public void actionPerformed(ActionEvent e)
                if (textField.getText().matches("\\\\d7"))
                    showMessage("输入正确,你的输入是" + textField.getText());
                 else
                    showMessage("请输入7位数字");
                
            
            private void showMessage(String message)
                JOptionPane.showMessageDialog(getRootPane(), message);
            
        );
        add(textField);
        add(button);
    

给你做参考。

参考技术A 我不得不喷你一下啊。你看的条件。textField_1.getText().length()!=7&&textField_1.getText().matches("\\d*")。假如我的字符串是abc首先不合法7位这是没问题的,关键你用了&&。abc显然不符合,这个&&是两个都不符合才打印,显然是只要一个不对就打印。而且*也是代表人一个1cbdcef也符合的,所以你这判断问题太多,下面基本同理,直接String regx = "\d7";
if(!Pattern.matches(regx,textField_1.getText()))JOptionPane.showMessageDialog(null,"请输入7位数字",
null, JOptionPane.ERROR_MESSAGE);;不就行了??
参考技术B 方法1逻辑有问题,应该是长度不为7或者字符串不匹配\\d*,修改方法为if(textField_1.getText().length()!=7||!textField_1.getText().matches("\\d*"));
方法2匹配正则表达式的条件返回false,应该修改为不匹配正则表达式返回false,修改方法为if(!Pattern.compile("[0-9]*").matcher(str).matches())。

附:正则表达式^[0-9]7$表示长度为7的以0-9开始、以0-9结束的字符串。追问

谢谢您的讲解!

参考技术C 建议用正则把内容变为char数组

Java - 检查 JTextField 是不是为空

【中文标题】Java - 检查 JTextField 是不是为空【英文标题】:Java - Check if JTextField is empty or notJava - 检查 JTextField 是否为空 【发布时间】:2013-06-12 12:25:13 【问题描述】:

所以我知道这是一个受欢迎的问题,并且已经找到了解决方案。但是当我尝试这个时它不能正常工作。

我的 JTextField 为空且按钮未启用。当我在我的文本字段中写一些东西时,按钮没有被启用。

所以我的程序应该每秒检查这个字段是否为空。只要有人在文本字段中写入内容,就应该启用该按钮。^^

loginbt = new JButton("Login");
    loginbt.addActionListener(new loginHandler());
    add(loginbt);

    if(name.getText().equals("")) 
        loginbt.setEnabled(false);
    else 
        loginbt.setEnabled(true);
    

【问题讨论】:

顺便说一句,我会用loginbt.setEnabled(name.getText().length()!=0); 【参考方案1】:

为此,您需要为您的JTextField 添加更改侦听器(一个DocumentListener,它对文本中的更改做出反应),在actionPerformed() 内,您需要将loginButton 更新为启用/禁用,具体取决于JTextfield 是否为空。

以下是我从这个thread 中找到的。

yourJTextField.getDocument().addDocumentListener(new DocumentListener() 
  public void changedUpdate(DocumentEvent e) 
    changed();
  
  public void removeUpdate(DocumentEvent e) 
    changed();
  
  public void insertUpdate(DocumentEvent e) 
    changed();
  

  public void changed() 
     if (yourJTextField.getText().equals(""))
       loginButton.setEnabled(false);
     
     else 
       loginButton.setEnabled(true);
    

  
);

【讨论】:

我想问一下如果按钮依赖于多个文本字段,程序是否会改变。我会使用相同的逻辑来定义操作,还是有其他方法可以使用更少的代码?感谢您的宝贵时间! 然后创建一个DocumentListener 实现来处理该按钮并将它们作为侦听器添加到所有文本框? 是的..谢谢..忘记了基本的东西:how to write document listener【参考方案2】:

如果 JTextField“名称”不包含文本,则以下将返回 true:

name.getText().isEmpty

【讨论】:

【参考方案3】:

你需要的是一个叫做 Document Listener 的东西。见How to Write a Document Listener。

【讨论】:

【参考方案4】:

检查 JTextFiled 是否为空条件:

if( (billnotf.getText().length()==0)||(billtabtf.getText().length()==0))

【讨论】:

不错。我喜欢这个。【参考方案5】:

好吧,渲染按钮启用/禁用的代码:

if(name.getText().equals("")) 
    loginbt.setEnabled(false);
else 
    loginbt.setEnabled(true);

必须以javax.swing.event.ChangeListener 书写并附加到字段中(请参阅here)。字段值的更改应触发侦听器重新评估对象状态。你期待什么?

【讨论】:

【参考方案6】:

使用以下代码:

if(name.getText().equals(""))

loginbt.disable();

【讨论】:

【参考方案7】:

您可以根据需要使用isEmpty()isBlank() 方法。


当且仅当 length() 为 0 时返回 true。

this.name.getText().isEmpty();

如果字符串为空或仅包含空白代码点,则返回 true,否则返回 false

this.name.getText().isBlank();

【讨论】:

【参考方案8】:

试试这个

if(name.getText() != null && name.getText().equals(""))

        loginbt.setEnabled(false);

else

        loginbt.setEnabled(true);

【讨论】:

【参考方案9】:
if(name.getText().hashCode() != 0)
    JOptionPane.showMessageDialog(null, "not empty");

else
    JOptionPane.showMessageDialog(null, "empty");

【讨论】:

冷,请解释一下为什么您认为这是一个解决方案?【参考方案10】:
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt)                                          
    // Submit Button        

    String Fname = jTextField1.getText();
    String Lname = jTextField2.getText();
    String Desig = jTextField3.getText();
    String Nic = jTextField4.getText();
    String Phone = jTextField5.getText();
    String Add = jTextArea1.getText();
    String Dob = jTextField6.getText();
    // String Gender;
    // Image

    if (Fname.hashCode() == 0 || Lname.hashCode() == 0 || Desig.hashCode() == 0 || Nic.hashCode() == 0 || Phone.hashCode() == 0 || Add.hashCode() == 0)
    
        JOptionPane.showMessageDialog(null, "Some fields are empty!");
    
    else
    
        JOptionPane.showMessageDialog(null, "OK");
    

【讨论】:

嗨@HarinduLakshan,请考虑添加更多信息以提高答案的质量。【参考方案11】:

在您的文本字段中尝试使用 keyListener

jTextField.addKeyListener(new KeyListener() 

        @Override
        public void keyTyped(KeyEvent e) 
        

        @Override
        public void keyPressed(KeyEvent e) 
            if (text.getText().length() >= 1) 
                button.setEnabled(true);
             else 
                button.setEnabled(false);
            
        

        @Override
        public void keyReleased(KeyEvent e) 
        

    );

【讨论】:

-1 DocumentListener 是首选方法。很少有理由使用 KeyListener。这是使用 AWT 时的旧设计。此外,代码无论如何都不会工作,因为在生成 keyPressed 事件时没有向 Document 添加任何文本,所以当第一个事件被触发时长度仍然为 0。 感谢指正,以后会看到DocumentListener

以上是关于java:判断在JTextField中输入的是不是是7位数字的主要内容,如果未能解决你的问题,请参考以下文章

java.swing JtextField 中怎么限制只能输入数字

请教各位java大神,怎么限制输入框JTextField中只能输入小数和整数,最好能提供详细点的回答(不是web的)。

java中JTextField输入的字符如何进行判断非法输入

Java 中 JTextArea 和 JTextField 的有啥区别?

java:JTextField 上的完全受控输入

Java JTextField文本框实时监控