Swing/TextLayout の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/TextLayout へ行く。
- Swing/TextLayout の差分を削除
--- category: swing folder: TextLayout title: TextLayoutでFontのメトリック情報を取得する tags: [Font, TextLayout, GlyphVector, LineMetrics, Graphics] author: aterai pubdate: 2012-01-09T13:16:40+09:00 description: TextLayoutからFontのAscent、Descent、Leadingなどのメトリック情報を取得して描画します。 image: https://lh4.googleusercontent.com/--iErOVV0RYk/TwpnJGdl4OI/AAAAAAAABHs/pHLpQWbpTWg/s800/TextLayout.png --- * Summary [#summary] `TextLayout`から`Font`の`Ascent`、`Descent`、`Leading`などのメトリック情報を取得して描画します。 #download(https://lh4.googleusercontent.com/--iErOVV0RYk/TwpnJGdl4OI/AAAAAAAABHs/pHLpQWbpTWg/s800/TextLayout.png) * Source Code Examples [#sourcecode] #code(link){{ String text = "abcdefthijklmnopqrstuvwxyz"; Font font = new Font(Font.SERIF, Font.ITALIC, 64); FontRenderContext frc = new FontRenderContext(null, true, true); TextLayout tl = new TextLayout(text, font, frc); @Override protected void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; int w = getWidth(); float baseline = getHeight() / 2f; g2.setPaint(Color.RED); g2.draw(new Line2D.Float(0, baseline, w, baseline)); g2.setPaint(Color.GREEN); float ascent = baseline - tl.getAscent(); g2.draw(new Line2D.Float(0, ascent, w, ascent)); g2.setPaint(Color.BLUE); float descent = baseline + tl.getDescent(); g2.draw(new Line2D.Float(0, descent, w, descent)); g2.setPaint(Color.ORANGE); float leading = baseline + tl.getDescent() + tl.getLeading(); g2.draw(new Line2D.Float(0, leading, w, leading)); g2.setPaint(Color.CYAN); float xheight = baseline - (float) tl.getBlackBoxBounds(23, 24).getBounds().getHeight(); g2.draw(new Line2D.Float(0, xheight, w, xheight)); g2.setPaint(Color.BLACK); tl.draw(g2, 0f, baseline); } }} * Explanation [#explanation] 上記のサンプルでは、上の文字列は`TextLayout`を使用して、下は`GlyphVector` + `LineMetrics`で`Font`のメトリック情報を取得してガイドラインを描画しています。 - `Color.RED` -- ベースライン - `Color.GREEN`: `Ascent` -- ベースライン - `Ascent` - `Color.BLUE`: `Descent` -- ベースライン + `Descent` - `Color.ORANGE`: `Leading` -- ベースライン + `Descent` + `Leading` - `Color.CYAN`: `x-height` -- ベースライン - 小文字`x`の高さ * Reference [#reference] - [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/font/TextLayout.html TextLayout (Java Platform SE 8)] - [https://docs.oracle.com/javase/tutorial/2d/text/index.html Lesson: Working with Text APIs (The Java™ Tutorials > 2D Graphics)] * コメント [#comment] * Comment [#comment] #comment #comment