Java 11の異体字対応

製品開発担当の大です。こんにちは。
少し前に「Java11でのAPI変更を雑に列挙」というブログ記事を読みました。その中で

ea20からフォント描画でユニコードのバリエーションセレクタが反映されるらしい。未確認。

と書かれていたので、雑ですが確認してみました。

検証用コード

public class Tekito {
	public static void main(String[] args) {

		JTextArea text = new JTextArea("[\u845B\uDB40\uDD00][\u845B\uDB40\uDD01]", 3, 20);
		text.setFont(new Font("游明朝", Font.PLAIN, 128));

		JFrame f = new JFrame("異体字のテスト");
		f.getContentPane().add(text);
		f.setSize(800, 300);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
	}
}

Java 8までの表示

Java8での異体字

Java8での異体字(クリックで拡大)

Java8以前は、異体字セレクタの部分が×で表示されていました。

Java 9、10での表示

Java 9、10での表示

Java 9、10での表示(クリックで拡大)

Java 9、10では異体字セレクタの部分は表示上は無視されています。

Java 11 (EA21) での表示

Java 11での拡大

Java 11での拡大(クリックで拡大)

おお、11ではちゃんと表示されてますね!

チケット

たぶんこのへん: Wrong rendering of variation sequences

最後に

そんなことよりJava 11でNashornがDeprecatedだとか。ショック大きすぎますね(本文と全然関係ない)