【问题标题】:Alphabet validation in JTextField using java swing [duplicate]使用java swing在JTextField中进行字母验证[重复]
【发布时间】:2012-01-25 03:11:21
【问题描述】:

当我在第一个 JTextField 中输入一个值时,需要对其进行验证,以便它只接受字母字符而不接受其他字符。当我输入非字母字符时,不应将其放入JTextField,并且在按其他键时应以标签格式显示“应仅输入字母字符”的消息。

这是我使用的代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class valid extends JFrame  {
    perform1 per1=new perform1();
    String num1="Alpha";
    String num2="Numeric";
    String num3="Alphanumeric";
    Container contentPane = getContentPane();
    JPanel jp=new JPanel(new GridLayout(2, 2));
    JLabel label1=new JLabel("STUDENT NAME", JLabel.LEFT);
    JLabel label2=new JLabel("REG NO", JLabel.LEFT);
    JTextField text1=new JTextField(15);
    JTextField text2=new JTextField(15);
    public valid(){
        text1.addKeyListener(new KeyAdapter() {
            public void keyReleased(KeyEvent e) {
                per1.dis(text1, e, num1);

            }
        });
        text2.addKeyListener(new KeyAdapter() {
            public void keyReleased(KeyEvent e) {
                per1.dis(text2, e, num2);
            }
        });
        setLayout(new FlowLayout(FlowLayout.CENTER));
        jp.add(label1);
        jp.add(text1);
        jp.add(label2);
        jp.add(text2);
        contentPane.add("Center", jp);
        setSize(400, 300);
        setVisible(true);
    }
    public static void main(String ar[])
    {
        new valid();
    }
}
class perform1{
public void dis(JTextField PTxtCtrl,KeyEvent PKeyvalue,String PTempStr){
    JLabel error=new JLabel();
    //JTextField text=new JTextField();
    String TmpCurntStr;
    String TmpConvStr;
    value val = value.valueOf(PTempStr);

   switch(val){
       case Alpha:
           if((PKeyvalue.getKeyChar()>='a'&& PKeyvalue.getKeyChar()<='z')||
           (PKeyvalue.getKeyCode()==PKeyvalue.VK_DELETE)||
           (PKeyvalue.getKeyCode()==PKeyvalue.VK_BACK_SPACE))
           {
           TmpCurntStr=PTxtCtrl.getText();
           TmpConvStr=TmpCurntStr.toUpperCase();
           PTxtCtrl.setText(TmpConvStr);
           //PTxtCtrl.setEditable(true);
           //error.setText("");
          }else{
           //PTxtCtrl.setEditable(false);
           //error.setText("* Enter only numeric digits(0-9)");

           }
           break;
       case Numeric:
           if((PKeyvalue.getKeyChar()>='0'&& PKeyvalue.getKeyChar()<='9')||
           (PKeyvalue.getKeyCode()==PKeyvalue.VK_DELETE)||
           (PKeyvalue.getKeyCode()==PKeyvalue.VK_BACK_SPACE))
           {
           TmpCurntStr=PTxtCtrl.getText();
           System.out.println("hai");
           }else{
               JOptionPane.showMessageDialog(null,"Only numeric");
           }
           break;
       case Alphanumeric:
           break;
   }
 }
  enum value{
    Alpha,
    Numeric,
    Alphanumeric
}
}

【问题讨论】:

  • 再次尝试完全相同的问题? stackoverflow.com/questions/8573365/…
  • 无论如何(如果我还没有 :-) 请学习 java 命名约定并遵守它们
  • 我投票结束了 3 次相同的问题
  • 不要使用 KeyEvents,因为它们是 AWT 特有的,使用 KeyBinding 就像使用 Swing 一样。就在最近,当我使用 KeyEvents 向 Swing 发布答案时,我收到了这个回复,从我的分数中扣除了 -1。最好了解 KeyBinding。其他人也可能会扣除你的分数。问候
  • ahh ...我知道我又一次看到完全相同的代码:stackoverflow.com/questions/8572001/… - 尽管问题略有变化。读你的教科书怎么样?我确信它包含一章解释如何解决该作业......

标签: java swing jtextfield


【解决方案1】:

您可以使用 JFormattedTextField 或通常的 JTextField,但分配您自己的 DocumentFilter。

【讨论】:

  • 匿名投票者,我来晚了,我删除了相同的答案
  • 我的问题是,当我当时输入数字键而不是字母时,jtextfield 不应该接受输入数字键,那么它会在标签框中给出一条消息,应该是红色前景是“仅接受 Alpha”,它位于特定 Jtextfield 旁边。请给我解决方案。
【解决方案2】:

如果您想删除不是字母的字符,您可以使用replaceAll 将它们替换为空。例如:

TmpCurntStr=PTxtCtrl.getText();
TmpConvStr=TmpConvStr.replaceAll("[^a-zA-Z]", "");
PTxtCtrl.setText(TmpConvStr);

【讨论】:

    【解决方案3】:

    我已经更正了,如果你不明白,请检查它,然后告诉我。

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class valid extends JFrame  {
        perform1 per1=new perform1();
        String num1="Alpha";
        String num2="Numeric";
        String num3="Alphanumeric";
        Container contentPane = getContentPane();
        JPanel jp=new JPanel(new GridLayout(2, 2));
        JLabel label1=new JLabel("STUDENT NAME", JLabel.LEFT);
        JLabel label2=new JLabel("REG NO", JLabel.LEFT);
        JTextField text1=new JTextField(15);
        JTextField text2=new JTextField(15);
        public valid(){
            text1.addKeyListener(new KeyAdapter() {
                public void keyReleased(KeyEvent e) {
                    /**
                     * check ASCII value of character enter in text1
                     * if it not fall in alphabets then send Alphanumeric
                     * 
                     */
                    char text = e.getKeyChar();
                    if(text >= 65 && text <= 90 || text >= 97 && text <= 122){
                        per1.dis(text1, e, num1);
                    }else{
                        per1.dis(text1, e, num3);
                    }
    
                }
            });
            text2.addKeyListener(new KeyAdapter() {
                public void keyReleased(KeyEvent e) {
                    per1.dis(text2, e, num2);
                }
            });
            setLayout(new FlowLayout(FlowLayout.CENTER));
            jp.add(label1);
            jp.add(text1);
            jp.add(label2);
            jp.add(text2);
            contentPane.add("Center", jp);
            setSize(400, 300);
            setVisible(true);
        }
        public static void main(String ar[])
        {
            new valid();
        }
    }
    class perform1{
    public void dis(JTextField PTxtCtrl,KeyEvent PKeyvalue,String PTempStr){
        JLabel error=new JLabel();
        //JTextField text=new JTextField();
        String TmpCurntStr;
        String TmpConvStr;
        value val = value.valueOf(PTempStr);
    
       switch(val){
           case Alpha:
               if((PKeyvalue.getKeyChar()>='a'&& PKeyvalue.getKeyChar()<='z')||
               (PKeyvalue.getKeyCode()==PKeyvalue.VK_DELETE)||
               (PKeyvalue.getKeyCode()==PKeyvalue.VK_BACK_SPACE))
               {
               TmpCurntStr=PTxtCtrl.getText();
               TmpConvStr=TmpCurntStr.toUpperCase();
               PTxtCtrl.setText(TmpConvStr);
               //PTxtCtrl.setEditable(true);
               //error.setText("");
              }else{
               //PTxtCtrl.setEditable(false);
               //error.setText("* Enter only numeric digits(0-9)");
    
               }
               break;
           case Numeric:
               if((PKeyvalue.getKeyChar()>='0'&& PKeyvalue.getKeyChar()<='9')||
               (PKeyvalue.getKeyCode()==PKeyvalue.VK_DELETE)||
               (PKeyvalue.getKeyCode()==PKeyvalue.VK_BACK_SPACE))
               {
               TmpCurntStr=PTxtCtrl.getText();
               System.out.println("hai");
               }else{
                   JOptionPane.showMessageDialog(null,"Only numeric");
                   PTxtCtrl.setText("");
               }
               break;
           case Alphanumeric:
    //         System.err.println("check");
               /**
                * if it send Alphanumeric then give a pop up message
                */
               JOptionPane.showMessageDialog(null,"Only Alphabets");
               PTxtCtrl.setText("");
               break;
       }
     }
      enum value{
        Alpha,
        Numeric,
        Alphanumeric
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-13
      • 2018-09-08
      • 2013-04-19
      • 2015-06-29
      • 1970-01-01
      • 2019-03-08
      相关资源
      最近更新 更多