Swing/HexFormatterSpinner のバックアップ(No.16)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/HexFormatterSpinner へ行く。
- 1 (2013-06-03 (月) 04:18:20)
- 2 (2013-06-05 (水) 02:27:40)
- 3 (2013-10-21 (月) 20:50:00)
- 4 (2014-11-15 (土) 01:06:54)
- 5 (2014-12-02 (火) 15:55:42)
- 6 (2016-02-18 (木) 15:57:48)
- 7 (2016-05-26 (木) 14:57:32)
- 8 (2017-04-04 (火) 14:17:08)
- 9 (2017-08-09 (水) 15:43:51)
- 10 (2018-08-12 (日) 18:40:35)
- 11 (2018-10-16 (火) 13:29:02)
- 12 (2019-04-26 (金) 17:48:33)
- 13 (2019-04-26 (金) 19:59:38)
- 14 (2019-07-30 (火) 22:06:08)
- 15 (2021-04-02 (金) 17:10:56)
- 16 (2022-08-20 (土) 22:25:44)
- 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:
概要
JSpinner
の表記を16
進数にして、そのUnicode
コードポイントに割り当てられた文字を表示します。
Screenshot
Advertisement
サンプルコード
private static DefaultFormatterFactory makeFFactory() {
DefaultFormatter formatter = new DefaultFormatter() {
@Override public Object stringToValue(String text) throws ParseException {
Pattern pattern = Pattern.compile("^\\s*(\\p{XDigit}{1,6})\\s*$");
Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
Integer iv = Integer.valueOf(text, 16);
if (iv <= Character.MAX_CODE_POINT) {
return iv;
}
}
Toolkit.getDefaultToolkit().beep();
throw new ParseException(text, 0);
// try {
// return Integer.valueOf(text, 16);
// } catch (NumberFormatException ex) {
// Toolkit.getDefaultToolkit().beep();
// ParseException wrap = new ParseException(text, 0);
// wrap.initCause(ex);
// throw wrap;
// }
}
@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
(Character.MAX_CODE_POINT
)までの整数を16
進数で表示するFormatter
を作成してJSpinner
に設定しています。
- IPAmj明朝とIPAex明朝フォントがインストールされている場合、その文字の形の違いが比較可能
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));
- Sample Usage (The Java™ Tutorials > Internationalization > Working with Text)
8.0.212-amzn
で実行するとゲタ文字や一部の表示が壊れる?8.0.222-amzn
で修正済み11.0.3-amzn
は正常- パネルのリサイズで再描画されると正常に戻ったり壊れたりする場合がある?
参考リンク
- Fontのアウトラインを取得して文字列の内部を修飾する
- IPAmj明朝フォント | 一般社団法人 文字情報技術促進協議会
- IPAexフォントおよびIPAフォントについて | 一般社団法人 文字情報技術促進協議会
- IPAmj明朝とIPAex明朝で形の違う字 NAOI's fotolife - 20130411131759