• 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に表示します。 JTextArea内のCaret位置にある文字のUnicodeブロック(文字種)を取得してJTextFieldに表示します。

スクリーンショット

Swing/UnicodeBlock.png

サンプルコード

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

解説

上記のサンプルでは、JTextAreaCaretListenerを設定してCaret位置、または選択文字列の先頭文字にある文字のUnicodeコードポイントを取得し、Character.UnicodeBlock.of(code)メソッドを使用してその文字種(Unicodeブロック)をJTextFieldに表示しています。 上記のサンプルでは、JTextAreaCaretListenerを設定してCaret位置、または選択文字列の先頭文字にある文字のUnicodeコードポイントを取得し、Character.UnicodeBlock.of(int)メソッドを使用してその文字種(Unicodeブロック)をJTextFieldに表示しています。
  • Unicodeコードポイントの取得は、サロゲートペアに対応
  • このサンプルでは、EMOTICONSHIRAGANAKATAKANAHALFWIDTH_AND_FULLWIDTH_FORMSBASIC_LATINCJK_UNIFIED_IDEOGRAPHSCJK_UNIFIED_IDEOGRAPHS_EXTENSION_BBOX_DRAWINGARROWSなどの文字種が確認可能
  • このサンプルではEMOTICONSHIRAGANAKATAKANAHALFWIDTH_AND_FULLWIDTH_FORMSBASIC_LATINCJK_UNIFIED_IDEOGRAPHSCJK_UNIFIED_IDEOGRAPHS_EXTENSION_BBOX_DRAWINGARROWSなどの文字種が確認可能

参考リンク

コメント