输入框(JTextField)内容限制和长度限制
方法一:(最简单的限制内容的方法)
count.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
char keyChar = e.getKeyChar();
if(!(keyChar >= '0' && keyChar <= '9')){
e.consume(); //缺点,不能控制赋值黏贴的内容
}
}
});
方法二:(方法未提取,限制内容和长度)
password.setDocument(new PlainDocument() {
@Override
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
String text = password.getText();
if (str == null) {
return;
}
if (text.length() + str.length() > 11) {
Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(password, "超出长度", "提示", JOptionPane.CLOSED_OPTION);
return;
}
char[] s = str.toCharArray();
int length = 0;
// 过滤非数字
for (int i = 0; i < s.length; i++) {
if ((s[i] >= '0') && (s[i] <= '9')) {
s[length++] = s[i];
}
}
super.insertString(offs, new String(s, 0, length), a);
}
});
限制长度
if (text.length() + str.length() > 11) {
Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(password, "超出长度", "提示", JOptionPane.CLOSED_OPTION);return;
}
限制内容
char[] s = str.toCharArray();
int length = 0;
// 过滤非数字
for (int i = 0; i < s.length; i++) {
if ((s[i] >= '0') && (s[i] <= '9')) {
s[length++] = s[i];
}
}
密码框的明文切换
password.setEchoChat('*'); // 其中* 为密文
password.setEchoChat((char)0); // 其中将0转化为char输入进去之后就是明文显示。
其中的监听方式是设置 ItemListener
代码如下:
//写法一: 并不单独抽离监听的方法
echoPassword.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {//ItemEvent.SELECTED = 1
password.setEchoChar((char) 0);
} else {
password.setEchoChar('*');
}
}
});
//写法二: 将监听的方法单独抽离出来
echoPassword.addItemListener(e -> echoPasswordItemStateChanged(e));
//下面是一个单独的方法,写在外边
private void echoPasswordItemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {//ItemEvent.SELECTED = 1
password.setEchoChar((char) 0);
} else {
password.setEchoChar('*');
}
}