FontMetrics 클래스

FontMetrics 클래스

FontMetrics 클래스는 특정 글꼴을 특정 화면에서 렌더링하는 방법에 대한 정보를 캡슐화하는 글꼴 메트릭 객체를 정의해요.

출처: Java API Reference

본문

하위 클래스 작성자 참고

이 메서드들 중 상당수는 닫힌 상호 재귀 루프를 이루므로, 하위 클래스를 쓸 때 무한 재귀를 막으려면 각 루프에서 메서드 하나 이상을 구현해야 해요. 특히 정확성을 보장하고 무한 재귀를 막기 위한 최소 권장 오버라이드 집합은 다음과 같아요.

  • getAscent()
  • getLeading()
  • getMaxAdvance()
  • charWidth(char)
  • charsWidth(char[], int, int)

이 구현들은 비효율적이라, 보통 툴킷 특화 구현으로 오버라이드해요.

public abstract class FontMetrics
extends Object
implements Serializable

기준선과 메트릭

애플리케이션이 문자를 위치 (x, y)에 놓으라고 요청하면, 문자의 기준점(참조점)이 그 위치에 놓여요. 기준점은 문자의 기준선(baseline)이라고 부르는 수평선을 지정해요. 일반 인쇄에서는 문자의 기준선이 정렬되어야 해요.

또한 글꼴의 모든 문자는 ascent, descent, advance width를 가져요.

  • ascent — 문자가 기준선 위로 올라간 양
  • descent — 문자가 기준선 아래로 내려간 양
  • advance width — AWT가 다음 문자를 놓아야 할 위치

문자열·문자 배열의 메트릭

문자 배열이나 문자열도 ascent, descent, advance width를 가져요. 배열의 ascent는 배열 내 임의 문자의 최대 ascent이고, descent는 최대 descent이며, advance width는 각 문자의 advance width 합이에요.

문자열의 advance는 문자열의 기준선을 따라가는 거리예요. 이 거리는 문자열을 중앙 정렬하거나 오른쪽 정렬할 때 사용할 폭이에요.

주의

문자열의 advance는 그 문자의 advance를 따로 측정해서 합한 것과 반드시 같지는 않아요. 문자의 폭은 문맥에 따라 달라질 수 있기 때문이에요. 예를 들어 아랍어 텍스트에서는 다른 문자와 연결되도록 문자의 모양이 바뀌고, 일부 문자 체계에서는 특정 문자 시퀀스가 합자(ligature)라는 단일 모양으로 표현돼요. 문자를 개별적으로 측정하면 이런 변환을 반영하지 못해요.

글꼴 메트릭은 기준선 상대적이라, 글꼴에 적용된 회전과 일반적으로 독립적이에요(그리드 힌팅 효과를 제외하고).

주요 메서드

  • getAscent() / getDescent() / getLeading() / getHeight() — 글꼴의 기본 메트릭을 반환해요.
  • charWidth(char) / stringWidth(String) / charsWidth(char[], int, int) — 문자·문자열의 너비를 반환해요.
  • getMaxAdvance() / getMaxAscent() / getMaxDescent() — 최대값을 반환해요.
  • getFont() — 이 메트릭에 대응하는 Font를 반환해요.

사용 예

FontMetricsGraphics.getFontMetrics(Font)으로 얻으며, 텍스트의 실제 픽셀 너비를 계산해 레이아웃을 잡는 데 널리 사용해요. 예를 들어 stringWidth로 문자열 폭을 계산해 가운데 정렬하거나, getHeight로 줄 간격을 계산해요.

더 알아보기