2

我有这段代码,但无法获得MaskFormatter正确的
maskformatter

MaskFormatter formatter = null;
  try {
    formatter = new MaskFormatter("HHHHHHH");
  } catch (ParseException e) {
    e.printStackTrace();
  }

txtTroll = new JFormattedTextField(formatter);

我需要任何十六进制字符(0-9、az 或 AZ),而“H”应该
只给我(0-9、az 或 AZ),但我弄错了。

当我输入文本时,只输入大写字母,而且速度很慢
,当我点击远离txtTroll所有字母时,所有字母都消失了

4

3 回答 3

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);
     }

    }
}

然后

像这样将其设置为您的文本字段的文档this.jTextField1.setDocument(new HexDocument());

我认为这比使用 jFormattedTextField 更好

于 2011-11-21T05:27:16.740 回答
2

你的假设有一些问题,确定你需要什么,如果你需要字母和数字,HEX不是你需要的,

“H”应该只给我(0-9、az 或 AZ),但我弄错了。

这是错误的假设,“H”应该给你 Any hex character (0-9, af or AF)

请参阅 javadoc:MaskFormatter

另外我建议你看看:实现文档过滤器

于 2011-11-21T01:03:12.937 回答
0

HHHH 将输出十六进制。使用 AAAAAAA

于 2014-07-31T05:52:53.747 回答