Getting font metrics

Definition of font parameters

Font metrics demo

The above output is produced by the following Java code:

import javax.swing.*;
import java.awt.*;

public class Metrics1  
{  
    public static void main(String[] args) 
    {
	SwingApp app = new SwingApp(200, 400);	    // set app window size
	app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    }
}

class SwingApp extends JFrame
{
    private final DrawPanel panel;		    // class variable
    private final Font font1, font2, font3;
   
    public SwingApp(int width, int height)	    // class constructor
    {
	super();				    // call to super class constructor
	font1 = new Font("Courier New", Font.PLAIN, 16);
	font2 = new Font("Times New Roman", Font.ITALIC, 18);
	font3 = new Font("Harrington", Font.BOLD, 24);   
	Container pane = super.getContentPane();    // create layout, set colors
	panel = new DrawPanel();		    // add GUI components
	panel.setBackground(Color.yellow);
	panel.setLayout(new GridLayout(17,1));
	addLabel("Courier New", font1);
	showMetrics(panel, font1);
	addLabel("", font1); 
	addLabel("Times New Roman", font2);
	showMetrics(panel, font2);
	addLabel("", font2);
	addLabel("Harrington", font3);
	showMetrics(panel, font3);		
  	pane.add(panel);
	
	Toolkit toolkit = Toolkit.getDefaultToolkit();	// optionally position JFrame
	Dimension screenSize = toolkit.getScreenSize(); // in the middle of the screen 
	super.setLocation((screenSize.width - width)/2, (screenSize.height - height)/2);	
	super.setTitle("Swing app");		    // set desired window title
	super.setSize(width, height);		    // set desired window size
	super.setVisible(true);	
    }
    
   public final void showMetrics(JPanel p, Font f)
    {
	int leading = p.getFontMetrics(f).getLeading();
	int ascent  = p.getFontMetrics(f).getAscent();
	int descent = p.getFontMetrics(f).getDescent();
	int height  = p.getFontMetrics(f).getHeight();
	System.out.printf("%d %d %d %d %s\n", leading, ascent, descent, height, f);
	addLabel("leading is " + leading, f); 
	addLabel("ascent is " + ascent, f); 
	addLabel("descent is " + descent, f); 
	addLabel("height is " + height, f); 
    }
   
    public final void addLabel(String s, Font f)
    {
	JLabel jl = new JLabel(s, SwingConstants.LEFT);
	jl.setFont(f);
	panel.add(jl);
    }            
}

class DrawPanel extends JPanel			    // main window panel
{       
    @Override
    public void paintComponent(Graphics g)
    {
	super.paintComponent(g);		    // must be the 1st line
	// add here more code for drawing on panel 
    }
}