• category: swing folder: HexFormatterSpinner title: JSpinnerの表記を16進数にする tags: [JSpinner, DefaultFormatter, Font] author: aterai pubdate: 2013-06-03T04:18:20+09:00 description: JSpinnerの表記を16進数にして、そのUnicodeコードポイントに割り当てられた文字を表示します。 image: https://lh4.googleusercontent.com/-eTZU_kuJGK4/UauUgRcPuTI/AAAAAAAABtc/7FNouA9JcLI/s800/HexFormatterSpinner.png

概要

JSpinnerの表記を16進数にして、そのUnicodeコードポイントに割り当てられた文字を表示します。

サンプルコード

private static DefaultFormatterFactory makeFFactory() {
  DefaultFormatter formatter = new DefaultFormatter() {
    @Override public Object stringToValue(String text) throws ParseException {
      return Integer.valueOf(text, 16);
    }
    @Override public String valueToString(Object value) throws ParseException {
      return String.format("%06X", (Integer) value);
    }
  };
  formatter.setValueClass(Integer.class);
  formatter.setOverwriteMode(true);
  return new DefaultFormatterFactory(formatter);
}
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、DefaultFormatter#stringToValue(String)DefaultFormatter#valueToString(Object)をオーバーライドして、0x0から0x10FFFFまでの整数を16進数で表示するFormatterを作成してJSpinnerに設定しています。


JSpinnerから取得した数値(コードポイント)から文字を生成する時、サロゲートペアなどの基本多言語面(BMP)外に対応するために、Sample Usage (The Java™ Tutorials > Internationalization > Working with Text)を参考にして、以下のような方法を使用しています。

int code = ((Integer) spinner.getValue()).intValue();
//char[] ca = Character.toChars(code);
String str = new String(Character.toChars(code));

IPAmj明朝IPAex明朝フォントがインストールされている場合、その文字の形の違いを比較できます。

参考リンク

コメント