java - 屏蔽 JTextField 中的一些字符

标签 java swing jtextfield jformattedtextfield

当用户在用户界面上输入时,我需要屏蔽数字,用户应该看到一个屏蔽的数字,但在 Java 代码上,我应该得到整个数字,包括屏蔽的字符 用户应该看到什么 4545********9632 但在 Java 代码(后面)上,我应该得到包括掩码字符在内的整个数字。我已尝试将 MaskFormatterJFormattedTextField 一起使用,但没有用,它显示了整个数字。

try {
     MaskFormatter mask=new MaskFormatter("####********####");
      JFormattedTextField js=new JFormattedTextField();
     mask.install(js);
  } catch (ParseException ex) {
      Logger.getLogger(Masker.class.getName()).log(Level.SEVERE, null, ex);
  }

最佳答案

这是我的建议,

class ACustomJEditText extends JTextField{
ArrayList<String> realText=new ArrayList<String>();
String displayText="";

public ACustomJEditText() {
    // TODO Auto-generated constructor stub
    super();
    addKeyListener(new KeyAdapter() {
        @Override
        public void keyReleased(KeyEvent e) {

            // DELETE TEXT on backspace
            if(e.getKeyCode()==KeyEvent.VK_BACK_SPACE) {
                if(realText!=null && realText.isEmpty()==false) {
                    realText.remove(realText.size()-1);//remove character
                }
                turnRealTextToString();
                //set the display text here
                setText(displayText);
                return;
            }

            //avoid any input if string actually string size is greater than 16
            if(realText.size()==16) {
                setText(displayText);
                return;
            }

            //other keys should now be added to the input for only numbers
            try{
                int input=Integer.parseInt(e.getKeyChar()+"");
                //add int to realtext
                realText.add(input+"");
                //turn real text to ####********#### string
                turnRealTextToString();
                setText(displayText);
            }catch (Exception ex) {
                // Other keys fail.
                setText(displayText);
            }
        }

        private void turnRealTextToString() {
            String result="";
            for(int i=0;i<realText.size();i++) {
                if(i>3 && i<12) {
                    result+="*";
                }else {
                    result+=realText.get(i);
                }

            }
            String realDisplay=realText.toString();
            System.out.println("DISPLAY: "+result+" REAL: "+getRealText());

            //set result to display text
            displayText=result;
            setText(displayText);
        }
    });
}

//get the actual real text
public String getRealText() {
    StringBuilder real=new StringBuilder();
    realText.forEach(text->{
        real.append(text);
    });

    return real.toString();
}

应该像魔术一样工作。

关于java - 屏蔽 JTextField 中的一些字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55450909/

相关文章:

java - Spring bean 使用外部属性文件初始化映射

java - NetBeans 文件选择器。如何使用它将文件从一个位置复制到字符串中定义的另一个位置?

java - 确认 JTextField 是否包含值 0.5-1?

java - 如何在java中模拟键盘按下

java - 需要帮助在 JFrame 中排列 JTextField

java - 在java中构建电路模型

java - 结果集 "column not found"与 c3p0

java - 异常不需要抛出来被捕获,但 IOException 可以

java - 如何从文本字段获取值并在另一个类中使用它们?

Java 通过自定义 JCheckBoxList 使用制表键进行导航