• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JSpinnerの表記を16進数にする
#navi(../)
#tags(JSpinner, DefaultFormatter, Font)
RIGHT:Posted by &author(aterai); at 2013-06-03
* JSpinnerの表記を16進数にする [#gd25fd97]
---
title: JSpinnerの表記を16進数にする
tags: [JSpinner, DefaultFormatter, Font]
author: aterai
pubdate: 2013-06-03T04:18:20+09:00
description: JSpinnerの表記を16進数にして、そのUnicodeコードポイントに割り当てられた文字を表示します。
---
* 概要 [#gd25fd97]
`JSpinner`の表記を`16`進数にして、その`Unicode`コードポイントに割り当てられた文字を表示します。

- &jnlp;
- &jar;
- &zip;
#download(https://lh4.googleusercontent.com/-eTZU_kuJGK4/UauUgRcPuTI/AAAAAAAABtc/7FNouA9JcLI/s800/HexFormatterSpinner.png)

#ref(https://lh4.googleusercontent.com/-eTZU_kuJGK4/UauUgRcPuTI/AAAAAAAABtc/7FNouA9JcLI/s800/HexFormatterSpinner.png)

** サンプルコード [#t5f5a11f]
* サンプルコード [#t5f5a11f]
#code(link){{
DefaultFormatter hexformatter = new DefaultFormatter() {
  @Override public Object stringToValue(String text) throws ParseException {
    try{
      return Integer.valueOf(text, 16);
    }catch(NumberFormatException nfe) {
      throw new ParseException(text, 0);
    }
  }
  private final String MASK = "000000";
  @Override public String valueToString(Object value) throws ParseException {
    String str = MASK + Integer.toHexString((Integer)value).toUpperCase();
    int i = str.length() - MASK.length();
    return str.substring(i);
  }
};
hexformatter.setValueClass(Integer.class);
hexformatter.setOverwriteMode(true);

}}

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

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

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

----
IPAmj明朝とIPAex明朝フォントがインストールされている場合、その文字の形の違いを比較することができます。
[http://mojikiban.ipa.go.jp/download.html IPAmj明朝]と[http://ipafont.ipa.go.jp/ IPAex明朝フォント]がインストールされている場合、その文字の形の違いを比較することができます。

- [http://mojikiban.ipa.go.jp/download.html IPAmj明朝フォントダウンロード | IPA 文字情報基盤]
- [http://ipafont.ipa.go.jp/ IPAexフォント/IPAフォント]

** 参考リンク [#ga82bd73]
* 参考リンク [#ga82bd73]
- [[Fontのアウトラインを取得して文字列の内部を修飾する>Swing/LineSplittingLabel]]
- [http://f.hatena.ne.jp/NAOI/20130411131759 IPAmj明朝とIPAex明朝で形の違う字 NAOI's fotolife - 20130411131759]

** コメント [#td71f10f]
* コメント [#td71f10f]
#comment
#comment