Swing/UnicodeBlock のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/UnicodeBlock へ行く。
- 1 (2020-06-22 (月) 02:44:20)
- 2 (2021-12-01 (水) 08:31:14)
- category: swing folder: UnicodeBlock title: JTextArea内の文字の文字種を取得する tags: [JTextArea, Caret, Character] author: aterai pubdate: 2020-06-22T02:43:05+09:00 description: JTextArea内のCaret位置にある文字のUnicodeブロック(文字種)を取得してJTextFieldに表示します。 image: https://drive.google.com/uc?id=1GOMN2Ar0unSeCHDsTEHGWIRcm0DgABQz
概要
JTextArea
内のCaret
位置にある文字のUnicode
ブロック(文字種)を取得してJTextField
に表示します。
Screenshot
Advertisement
サンプルコード
JTextArea textArea = new JTextArea("😀😁😂てすとテストTESTtest試験、𠮟┷→");
textArea.addCaretListener(e -> {
try {
int loc = Math.min(e.getDot(), e.getMark());
Document doc = textArea.getDocument();
String txt = doc.getText(loc, 1);
int code = txt.codePointAt(0);
if (Character.isHighSurrogate((char) code)) {
txt = doc.getText(loc, 2);
code = txt.codePointAt(0);
}
Character.UnicodeBlock unicodeBlock = Character.UnicodeBlock.of(code);
label.setText(String.format("%s: U+%04X", txt, code));
labelUnicodeBlock.setText(Objects.toString(unicodeBlock));
} catch (BadLocationException ex) {
// should never happen
}
});
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JTextArea
にCaretListener
を設定してCaret
位置、または選択文字列の先頭文字にある文字のUnicode
コードポイントを取得し、Character.UnicodeBlock.of(int)メソッドを使用してその文字種(Unicode
ブロック)をJTextField
に表示しています。
Unicode
コードポイントの取得は、サロゲートペアに対応- このサンプルでは、
EMOTICONS
、HIRAGANA
、KATAKANA
、HALFWIDTH_AND_FULLWIDTH_FORMS
、BASIC_LATIN
、CJK_UNIFIED_IDEOGRAPHS
、CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
、BOX_DRAWING
、ARROWS
などの文字種が確認可能