Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java의 Font와 FontMetrics 클래스, 무엇이 다를까?

Java AWT에서 Font 클래스는 화면에 표시할 폰트를 설정하고 언어의 문자들을 해당 글리프(glyph)에 매핑하는 역할을 합니다. 반면 FontMetrics 클래스는 특정 화면에서 특정 폰트가 렌더링될 때 필요한 정보를 캡슐화한 폰트 메트릭스 객체를 정의합니다.

Font 클래스란?

Font 클래스는 Font 객체의 인스턴스를 생성하여 텍스트 그리기, 레이블(label), 텍스트 필드(text field), 버튼(button) 등의 폰트를 지정하는 데 사용됩니다. 폰트는 이름(name), 스타일(style), 크기(size) 세 가지 요소로 지정할 수 있습니다.

폰트에는 패밀리 이름(family name), 논리적 이름(logical name), 페이스 이름(face name)이라는 세 가지 이름이 존재합니다.

  • 패밀리 이름(family name): 폰트의 일반적인 이름입니다. 예: Courier
  • 논리적 이름(logical name): 폰트의 카테고리를 지정합니다. 예: Monospaced
  • 페이스 이름(face name): 구체적인 폰트를 지정합니다. 예: Courier Italic

Font 사용 예제

import java.awt.*;
import javax.swing.*;
public class FontTest extends JPanel {
    public void paint(Graphics g) {
        g.setFont(new Font("TimesRoman", Font.BOLD, 15));
        g.setColor(Color.blue);
        g.drawString("Welcome to Tutorials Point", 10, 20);
    }
    public static void main(String args[]) {
        JFrame test = new JFrame();
        test.getContentPane().add(new FontTest());
        test.setTitle("Font Test");
        test.setSize(350, 275);
        test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        test.setLocationRelativeTo(null);
        test.setVisible(true);
    }
}

실행 결과

Java의 Font와 FontMetrics 클래스, 무엇이 다를까?

FontMetrics 클래스란?

FontMetrics 클래스는 특정 Font 객체에 대한 상세 파라미터를 반환하는 데 사용됩니다. FontMetrics 객체는 getFontMetrics() 메서드를 통해 생성할 수 있으며, 이 클래스의 메서드들은 Font 객체 구현의 세부 정보에 접근할 수 있게 해줍니다.

특히 bytesWidth(), charWidth(), charsWidth(), getWidth(), stringWidth() 같은 메서드들은 텍스트 객체의 픽셀 단위 너비를 계산하는 데 사용됩니다. 이러한 메서드들은 화면상에서 텍스트의 가로 위치를 정확하게 결정하는 데 필수적입니다.

FontMetrics 사용 예제

import java.awt.*;
import javax.swing.*;
public class FontMetricsTest extends JPanel {
    public void paint(Graphics g) {
        String msg = "Tutorials Point";
        Font f = new Font("Times New Roman", Font.BOLD | Font.ITALIC, 15);
        FontMetrics fm = getFontMetrics(f);
        g.setFont(f);
        int x = (getSize().width - fm.stringWidth(msg)) / 2;
        System.out.println("x= " + x);
        int y = getSize().height / 2;
        System.out.println("y= " + y);
        g.drawString(msg, x, y);
    }
    public static void main(String args[]) {
        JFrame test = new JFrame();
        test.getContentPane().add(new FontMetricsTest());
        test.setTitle("FontMetrics Test");
        test.setSize(350, 275);
        test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        test.setLocationRelativeTo(null);
        test.setVisible(true);
    }
}

위 예제에서는 stringWidth() 메서드로 문자열의 실제 픽셀 너비를 구한 뒤, 패널의 중앙에 텍스트를 정렬하여 출력합니다. 이처럼 FontMetrics는 텍스트 배치와 정렬 작업에서 매우 유용하게 활용됩니다.

실행 결과

Java의 Font와 FontMetrics 클래스, 무엇이 다를까?

정리

Font는 폰트 자체를 정의하고 적용하는 클래스이며, FontMetrics는 해당 폰트가 화면에 어떻게 렌더링되는지에 대한 측정 정보를 제공하는 클래스입니다. 즉, Font가 '무엇을 어떤 모양으로 그릴지'를 결정한다면, FontMetrics는 '그 텍스트가 화면에서 얼마나 많은 공간을 차지하는지'를 알려주는 역할을 한다고 이해하면 됩니다.