2

私はこのコードを持っていますが、MaskFormatter正しい
マスクフォーマッターを取得できません

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

txtTroll = new JFormattedTextField(formatter);

任意の 16 進文字 (0-9、az または AZ) が必要で、"H" は
(0-9、az または AZ) のみを与えるはずですが、間違っています。

テキストを入力すると、大文字のみが入力され、入力が遅くなり
、クリックして離れた場所に移動すると、txtTrollすべての文字が消えます

4

3 に答える 3

6

あなたは私が好む別の解決策を使うことができます

insertStringur Documentクラスを記述し、それを使用してそのメソッドを書き直します。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);
     }

    }
}

それから

このようにurtextFieldのドキュメントとして設定しますthis.jTextField1.setDocument(new HexDocument());

これはjFormattedTextFieldを使用するよりも優れていると思います

于 2011-11-21T05:27:16.740 に答える
2

あなたの仮定にはいくつかの問題があります。必要なものを確認してください。文字と数字が必要な場合は、HEX は必要なものではありません。

「H」は (0-9、az または AZ) のみを与えるはずですが、間違っています。

これは間違った仮定です。"H" は任意の 16 進文字(0-9、af または AF)を与えるはずです。

javadoc を参照してください: MaskFormatter

また、以下をご覧になることをお勧めします:ドキュメント フィルターの実装

于 2011-11-21T01:03:12.937 に答える
0

HHHH は出力を 16 進数にします。使うあああああ

于 2014-07-31T05:52:53.747 に答える