我有这段代码而无法获得MaskFormatter
权利
maskformatter
MaskFormatter formatter = null;
try {
formatter = new MaskFormatter("HHHHHHH");
} catch (ParseException e) {
e.printStackTrace();
}
txtTroll = new JFormattedTextField(formatter);
我需要任何十六进制字符(0-9,a-z或A-Z)和“H”应该为 只给我(0-9,a-z或A-Z),但我错了。
当我输入文字时,只输入大写字母,而且输入很慢
当我点击txtTroll
所有字母消失
答案 0 :(得分:6)
你可以使用我喜欢的另一种解决方案
编写你的Document类并使用insertString
regex expr
方法
示例:
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.text.AttributeSet;
import javax.swing.text.PlainDocument;
/**
*
* @author cpp-qt
*/
public class HexDocument extends PlainDocument {
private String text = "";
@Override
public void insertString(int offset, String txt, AttributeSet a) {
try {
text = getText(0, getLength());
if ((text + txt).matches("[0-9a-fA-F]{0,7}")) {
super.insertString(offset, txt, a);
}
} catch (Exception ex) {
Logger.getLogger(HexDocument.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
然后
将其设置为textField的文档,如this.jTextField1.setDocument(new HexDocument());
我认为这比使用jFormattedTextField
更好答案 1 :(得分:2)
你的假设存在一些问题,确保你需要什么,如果你需要字母和数字,HEX 不你需要什么,
“H”应该只给我(0-9,a-z或A-Z),但我错了。
这是错误的假设,“H”应该给你任何十六进制字符(0-9,a-f或A-F)。
请参阅javadoc: MaskFormatter
另外,我建议您查看:Implementing a Document Filter
答案 2 :(得分:0)
HHHH将输出为十六进制。使用AAAAAAA