概要
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
などの文字種が確認可能