これは属性付きの文字列を扱うときに重要になってくる。属性とはフォントや色、装飾(イタリックやボールド)などがある。setFontやsetColor使えば問題なさそうだが、AttributedStringは文字単位で属性が指定できる。
例えば、ある文字列の0番目から4番目の文字まで赤にして5番目から9番目の文字を青にするみたいに指定できる。それだけならまだ文字列を自分で分割してsetColorで色付けでいいじゃんと思うけど更に3番目から7番目の背景色だけ緑にしたい!ってなると
- 0〜2番目 文字色:赤, 背景色:白
- 3〜4番目 文字色:赤, 背景色:緑
- 5〜7番目 文字色:青, 背景色:緑
- 7〜9番目 文字色:青, 背景色:白
となり、これを描画時に指定するには結構大変だと思う。AttributedStringを使えば、属性を指定したあとでgetIteratorを呼び出してAttributedCharacterIteratorオブジェクトを取得して後はTextLayoutに渡してTextLayoutのdrawを呼び出せばいい。
名前が長くて難しそうなクラスがでてくるけどやってることは単純なのでSwingで複雑な属性を持った文字列の描画をやるときはAttributeStringとTextLayoutを使ってみるのもいいと思う。