我现在想控制一个jFormattedTextField的输入
只允许输入一个数字,或者多个数字,用,分割。
如:11
11,22
1,3333,1
请问怎么实现?
个人认为要用到正则表达式,MaskFormatter类好像没办法实现我的要求。
有人能帮忙解决吗?最好能给代码,谢谢
感谢楼下2位的回答,我想问下,只能通过把值取出来再另写代码去判断吗?jFormattedTextField本身不能解决这个问题吗?
请教个jFormattedTextField的输入问题
答案:2 悬赏:70 手机版
解决时间 2021-01-03 18:31
- 提问者网友:低吟詩仙的傷
- 2021-01-03 08:17
最佳答案
- 五星知识达人网友:玩家
- 2021-01-03 09:30
你要的伸缩性 MaskFormatter 没办法提供。就用简便的 regex 吧:
import javax.swing.*;
class RestrictEntryByRegex {
public static void main(String[] args) throws Exception {
JTextField jtf = new JTextField();
while ( ! jtf.getText().matches("(\\d+|\\d+,)+"))
JOptionPane.showMessageDialog(null, jtf,
"只接受数字和逗号", JOptionPane.PLAIN_MESSAGE);
for (String num: jtf.getText().split(","))
System.out.println(num);
}
}
===============================================================================
必须在 JFormattedTextField 里处理的话,可以通过 DocumentFilter 截取并过滤字符输入。
下面这段代码声明的 tf 为例:
JFormattedTextField tf = new JFormattedTextField();
((AbstractDocument)tf.getDocument()).setDocumentFilter(new DocumentFilter() {
public void replace(DocumentFilter.FilterBypass fb, int offset, int length,
String text, AttributeSet attrs) throws BadLocationException {
if (text.matches("\\d+|,"))
super.replace(fb, offset, length, text, attrs);
}
});
对了,jisonyu77,你可以提供更多你碰到的问题的细节吗?
import javax.swing.*;
class RestrictEntryByRegex {
public static void main(String[] args) throws Exception {
JTextField jtf = new JTextField();
while ( ! jtf.getText().matches("(\\d+|\\d+,)+"))
JOptionPane.showMessageDialog(null, jtf,
"只接受数字和逗号", JOptionPane.PLAIN_MESSAGE);
for (String num: jtf.getText().split(","))
System.out.println(num);
}
}
===============================================================================
必须在 JFormattedTextField 里处理的话,可以通过 DocumentFilter 截取并过滤字符输入。
下面这段代码声明的 tf 为例:
JFormattedTextField tf = new JFormattedTextField();
((AbstractDocument)tf.getDocument()).setDocumentFilter(new DocumentFilter() {
public void replace(DocumentFilter.FilterBypass fb, int offset, int length,
String text, AttributeSet attrs) throws BadLocationException {
if (text.matches("\\d+|,"))
super.replace(fb, offset, length, text, attrs);
}
});
对了,jisonyu77,你可以提供更多你碰到的问题的细节吗?
全部回答
- 1楼网友:孤独入客枕
- 2021-01-03 09:44
import java.util.regex.pattern;public class patterntest {public static void main(string[] args) { string str="1a3";//需要判断的字符串 system.out.println(pattern.matches("^[0-9]+$", str));//判断是否符合全由数字组成,符合返回true,否则返回false}}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯