JFInputLimitation
V6以前ではJFInputLimitationで入力可能文字種に、以下のいずれかの値を設定すると、JFInputLimitationで定義されている文字以外の文字が入力可能となっていました。
TYPE_ALL
TYPE_MULTIBYTE
入力可能文字種の指定に、以下の文字種がすべて含まれる場合
TYPE_MULTIBYTE_DIGIT
TYPE_MULTIBYTE_LOWERCASE
TYPE_MULTIBYTE_UPPERCASE
TYPE_MULTIBYTE_SPECIAL
TYPE_MULTIBYTE_HIRAGANA
TYPE_MULTIBYTE_KATAKANA
TYPE_JIS_KANJI
TYPE_GAIJI
TYPE_VENDOR_SPECIAL
V7からは、上記を指定した文字種以外の文字は入力できないため、以下の非互換が発生します。
JFInputLimitationでの入力可能文字種の指定により、動作が異なります。
TYPE_ALLを指定した場合
V6以前の動作
すべての文字が入力可能です。
V7以降の動作
以下の文字種に該当する文字だけ入力可能です。
TYPE_MULTIBYTE_DIGIT
TYPE_MULTIBYTE_LOWERCASE
TYPE_MULTIBYTE_UPPERCASE
TYPE_MULTIBYTE_SPECIAL
TYPE_MULTIBYTE_HIRAGANA
TYPE_MULTIBYTE_KATAKANA
TYPE_JIS_KANJI
TYPE_GAIJI
TYPE_VENDOR_SPECIAL
TYPE_DIGIT
TYPE_LOWERCASE
TYPE_UPPERCASE
TYPE_SPECIAL
TYPE_KATAKANA
[対処方法]
文字入力部品でprocessKeyEvent(KeyEvent)メソッドをオーバーライドすることで対処できます。
JFInputLimitationの設定をやめて、デフォルトの入力制限で入力できない文字を入力可能文字に追加し、重複文字のキー入力を処理しないことで対処できます。
例
実装例
public class SubField extends JFFieldString {
//デフォルトの入力制限で定義されていない文字を入力可能文字に追加
String enableChars = "\u00a6\u00a7\u00a9\u00ad\u00ae" +
"\u00b0\u00b2\u00b3\u00b6\u00b9\u00bc\u00bd\u00be";
//重複文字を入力不可能文字に追加
//√∠∩∪∫∵ ≒≡⊥
String disableChars = "\u221a\u2220\u2229\u222a\u222b" +
"\u2235\u2252\u2261\u22a5";
public SubField() {
//入力可能文字を追加
this.setEnableChars(enableChars.toCharArray());
}
protected void processKeyEvent(KeyEvent ke){
if(ke.getID()==KeyEvent.KEY_TYPED){
//重複文字は入力しない
if(disableChars.indexOf(ke.getKeyChar())!= -1){
return;
}else{
super.processKeyEvent(ke);
}
}else{
super.processKeyEvent(ke);
}
}
} |
TYPE_MULTIBYTE、または以下の組み合わせのすべてを指定した場合
TYPE_MULTIBYTE_DIGIT
TYPE_MULTIBYTE_LOWERCASE
TYPE_MULTIBYTE_UPPERCASE
TYPE_MULTIBYTE_SPECIAL
TYPE_MULTIBYTE_HIRAGANA
TYPE_MULTIBYTE_KATAKANA
TYPE_JIS_KANJI
TYPE_GAIJI
TYPE_VENDOR_SPECIAL
V6以前の動作
TYPE_HALFBYTEに該当しないすべての文字が入力可能です。
V7以降の動作
以下の文字種に該当する文字だけ入力可能です。
TYPE_MULTIBYTE_DIGIT
TYPE_MULTIBYTE_LOWERCASE
TYPE_MULTIBYTE_UPPERCASE
TYPE_MULTIBYTE_SPECIAL
TYPE_MULTIBYTE_HIRAGANA
TYPE_MULTIBYTE_KATAKANA
TYPE_JIS_KANJI
TYPE_GAIJI
TYPE_VENDOR_SPECIAL
[対処方法]
JFInputLimitationのsetEnableUnicodeType(java.lang.Character.UnicodeBlock...enableUnicodeType)を使用して、BASIC_LATIN以外の文字ブロックに属する文字を入力許可し、TYPE_SPECIALとTYPE_KATAKANAに属する文字を入力不可能文字に追加することで、TYPE_HALFBYTE以外の文字が入力できるようになります。
例
実装例
JFInputLimitation limit = new JFInputLimitation();
//BASIC_LATIN以外の文字を入力可能とする。
limit.setEnableUnicodeType(Character.UnicodeBlock.AEGEAN_NUMBERS
,Character.UnicodeBlock.ALPHABETIC_PRESENTATION_FORMS
,Character.UnicodeBlock.ARABIC
,Character.UnicodeBlock.ARABIC_PRESENTATION_FORMS_A
,Character.UnicodeBlock.ARABIC_PRESENTATION_FORMS_B
,Character.UnicodeBlock.ARMENIAN
,Character.UnicodeBlock.ARROWS
//,Character.UnicodeBlock.BASIC_LATIN 半角文字は入力しない
,Character.UnicodeBlock.BENGALI
,Character.UnicodeBlock.BLOCK_ELEMENTS
,Character.UnicodeBlock.BOPOMOFO
,Character.UnicodeBlock.BOPOMOFO_EXTENDED
,Character.UnicodeBlock.BOX_DRAWING
,Character.UnicodeBlock.BRAILLE_PATTERNS
,Character.UnicodeBlock.BUHID
,Character.UnicodeBlock.BYZANTINE_MUSICAL_SYMBOLS
,Character.UnicodeBlock.CHEROKEE
,Character.UnicodeBlock.CJK_COMPATIBILITY
,Character.UnicodeBlock.CJK_COMPATIBILITY_FORMS
,Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
,Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT
,Character.UnicodeBlock.CJK_RADICALS_SUPPLEMENT
,Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
,Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
,Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
,Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
,Character.UnicodeBlock.COMBINING_DIACRITICAL_MARKS
,Character.UnicodeBlock.COMBINING_HALF_MARKS
,Character.UnicodeBlock.COMBINING_MARKS_FOR_SYMBOLS
,Character.UnicodeBlock.CONTROL_PICTURES
,Character.UnicodeBlock.CURRENCY_SYMBOLS
,Character.UnicodeBlock.CYPRIOT_SYLLABARY
,Character.UnicodeBlock.CYRILLIC
,Character.UnicodeBlock.CYRILLIC_SUPPLEMENTARY
,Character.UnicodeBlock.DESERET
,Character.UnicodeBlock.DEVANAGARI
,Character.UnicodeBlock.DINGBATS
,Character.UnicodeBlock.ENCLOSED_ALPHANUMERICS
,Character.UnicodeBlock.ENCLOSED_CJK_LETTERS_AND_MONTHS
,Character.UnicodeBlock.ETHIOPIC
,Character.UnicodeBlock.GENERAL_PUNCTUATION
,Character.UnicodeBlock.GEOMETRIC_SHAPES
,Character.UnicodeBlock.GEORGIAN
,Character.UnicodeBlock.GOTHIC
,Character.UnicodeBlock.GREEK
,Character.UnicodeBlock.GREEK_EXTENDED
,Character.UnicodeBlock.GUJARATI
,Character.UnicodeBlock.GURMUKHI
,Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
,Character.UnicodeBlock.HANGUL_COMPATIBILITY_JAMO
,Character.UnicodeBlock.HANGUL_JAMO
,Character.UnicodeBlock.HANGUL_SYLLABLES
,Character.UnicodeBlock.HANUNOO
,Character.UnicodeBlock.HEBREW
,Character.UnicodeBlock.HIGH_PRIVATE_USE_SURROGATES
,Character.UnicodeBlock.HIGH_SURROGATES
,Character.UnicodeBlock.HIRAGANA
,Character.UnicodeBlock.IDEOGRAPHIC_DESCRIPTION_CHARACTERS
,Character.UnicodeBlock.IPA_EXTENSIONS
,Character.UnicodeBlock.KANBUN
,Character.UnicodeBlock.KANGXI_RADICALS
,Character.UnicodeBlock.KANNADA
,Character.UnicodeBlock.KATAKANA
,Character.UnicodeBlock.KATAKANA_PHONETIC_EXTENSIONS
,Character.UnicodeBlock.KHMER
,Character.UnicodeBlock.KHMER_SYMBOLS
,Character.UnicodeBlock.LAO
,Character.UnicodeBlock.LATIN_1_SUPPLEMENT
,Character.UnicodeBlock.LATIN_EXTENDED_A
,Character.UnicodeBlock.LATIN_EXTENDED_ADDITIONAL
,Character.UnicodeBlock.LATIN_EXTENDED_B
,Character.UnicodeBlock.LETTERLIKE_SYMBOLS
,Character.UnicodeBlock.LIMBU
,Character.UnicodeBlock.LINEAR_B_IDEOGRAMS
,Character.UnicodeBlock.LINEAR_B_SYLLABARY
,Character.UnicodeBlock.LOW_SURROGATES
,Character.UnicodeBlock.MALAYALAM
,Character.UnicodeBlock.MATHEMATICAL_ALPHANUMERIC_SYMBOLS
,Character.UnicodeBlock.MATHEMATICAL_OPERATORS
,Character.UnicodeBlock.MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A
,Character.UnicodeBlock.MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B
,Character.UnicodeBlock.MISCELLANEOUS_SYMBOLS
,Character.UnicodeBlock.MISCELLANEOUS_SYMBOLS_AND_ARROWS
,Character.UnicodeBlock.MISCELLANEOUS_TECHNICAL
,Character.UnicodeBlock.MONGOLIAN
,Character.UnicodeBlock.MUSICAL_SYMBOLS
,Character.UnicodeBlock.MYANMAR
,Character.UnicodeBlock.NUMBER_FORMS
,Character.UnicodeBlock.OGHAM
,Character.UnicodeBlock.OLD_ITALIC
,Character.UnicodeBlock.OPTICAL_CHARACTER_RECOGNITION
,Character.UnicodeBlock.ORIYA
,Character.UnicodeBlock.OSMANYA
,Character.UnicodeBlock.PHONETIC_EXTENSIONS
,Character.UnicodeBlock.PRIVATE_USE_AREA
,Character.UnicodeBlock.RUNIC
,Character.UnicodeBlock.SHAVIAN
,Character.UnicodeBlock.SINHALA
,Character.UnicodeBlock.SMALL_FORM_VARIANTS
,Character.UnicodeBlock.SPACING_MODIFIER_LETTERS
,Character.UnicodeBlock.SPECIALS
,Character.UnicodeBlock.SUPERSCRIPTS_AND_SUBSCRIPTS
,Character.UnicodeBlock.SUPPLEMENTAL_ARROWS_A
,Character.UnicodeBlock.SUPPLEMENTAL_ARROWS_B
,Character.UnicodeBlock.SUPPLEMENTAL_MATHEMATICAL_OPERATORS
,Character.UnicodeBlock.SUPPLEMENTARY_PRIVATE_USE_AREA_A
,Character.UnicodeBlock.SUPPLEMENTARY_PRIVATE_USE_AREA_B
,Character.UnicodeBlock.SYRIAC
,Character.UnicodeBlock.TAGALOG
,Character.UnicodeBlock.TAGBANWA
,Character.UnicodeBlock.TAGS
,Character.UnicodeBlock.TAI_LE
,Character.UnicodeBlock.TAI_XUAN_JING_SYMBOLS
,Character.UnicodeBlock.TAMIL
,Character.UnicodeBlock.TELUGU
,Character.UnicodeBlock.THAANA
,Character.UnicodeBlock.THAI
,Character.UnicodeBlock.TIBETAN
,Character.UnicodeBlock.UGARITIC
,Character.UnicodeBlock.UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS
,Character.UnicodeBlock.VARIATION_SELECTORS
,Character.UnicodeBlock.VARIATION_SELECTORS_SUPPLEMENT
,Character.UnicodeBlock.YI_RADICALS
,Character.UnicodeBlock.YI_SYLLABLES
,Character.UnicodeBlock.YIJING_HEXAGRAM_SYMBOLS
);
//半角カタカナを入力不可能文字に追加
//半角カタカナはHALFWIDTH_AND_FULLWIDTH_FORMSブロックに含まれておりこのままでは半角カタカナが入力できてしまうため半角カタカナを入力不可能文字に追加する。
//dd66~ff9dまで
String disableChars =
"\uff66\uff67\uff68\uff69\uff6a" +
"\uff6b\uff6c\uff6d\uff6e\uff6f" +
"\uff70\uff71\uff72\uff73\uff74" +
"\uff75\uff76\uff77\uff78\uff79" +
"\uff7a\uff7b\uff7c\uff7d\uff7e" +
"\uff7f\uff80\uff81\uff82\uff83" +
"\uff84\uff85\uff86\uff87\uff88" +
"\uff89\uff8a\uff8b\uff8c\uff8d" +
"\uff8e\uff8f\uff90\uff91\uff92" +
"\uff93\uff94\uff95\uff96\uff97" +
"\uff98\uff99\uff9a\uff9b\uff9c" +
"\uff9d"+
//BASIC_LATINの範囲外の半角特殊文字を入力不可能文字に追加
//以下の文字がLATIN_1_SUPPLEMENT、GENERAL_PUNCTUATION、HALFWIDTH_AND_FULLWIDTH_FORMSブロックに含まれるため、入力不可能文字に追加
//\~。 「 」 、・ ー
"\u00a5\u203e\uff61\uff62\uff63" +
"\uff64\uff65\uff70\uff9e\uff9f"+
//重複文字を入力不可能文字に追加
//√∠∩∪∫∵ ≒≡⊥
"\u221a\u2220\u2229\u222a\u222b" +
"\u2235\u2252\u2261\u22a5"+
//BASIC_LATINの範囲外の制御文字を入力不可能文字に追加
// 0080~009f
"\u0080\u0081\u0082\u0083\u0084" +
"\u0085\u0086\u0087\u0088\u0089" +
"\u008a\u008b\u008c\u008d\u008e" +
"\u008f\u0090\u0091\u0092\u0093" +
"\u0094\u0095\u0096\u0097\u0098" +
"\u0099\u009a\u009b\u009c\u009d" +
"\u009e\u009f";
//入力不可能文字を追加
limit.setDisableChars(disableChars.toCharArray());
//修正前のバージョンではTYPE_HALFBYTEに含まれていなかった文字を入力可能文字として追加
String enableChars ="\u007e";//~
//入力可能文字を追加
limit.setEnableChars(enableChars.toCharArray()); |
JFInputLimitationの機能の詳細については、"J Business Kit GUIライブラリ パッケージ説明書"を参照してください。