Some fonts methods

Getting available fonts in the system

The complete list of fonts appears on the Java console. The floowing application allows you to browse the fonts.

The Java code of this app follows:

Java Code
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

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

class SwingApp extends JFrame implements ActionListener
{
    private int fontNumber = 0;
    private final DrawPanel panel;		    // class variable
    private final String[] availFonts;
    private final JLabel jl0, jl1, jl2, jl3;
    private final JButton jb1, jb2;

    public SwingApp(int width, int height)	    // class constructor
    {
	super();				    // call to super class constructor
	Container pane = super.getContentPane();    // create layout, set colors
	panel = new DrawPanel();		    // add GUI components
	panel.setBackground(Color.yellow);
	panel.setLayout(new GridLayout(5,1));
	
	GraphicsEnvironment gg=GraphicsEnvironment.getLocalGraphicsEnvironment();
	availFonts = gg.getAvailableFontFamilyNames();
	jl0 = new JLabel("Total number of fonts: " + availFonts.length,
                        SwingConstants.CENTER);
	for (int i=0; i<availFonts.length; i++)
	    System.out.println(availFonts[i]);
	jl1 = new JLabel("", SwingConstants.CENTER);
	jl1.setFont(new Font("Monospaced", Font.PLAIN, 16));
	jl2 = new JLabel("", SwingConstants.CENTER);
	jl3 = new JLabel("", SwingConstants.CENTER);
	setLabels(0);
	
	panel.add(jl0);
	panel.add(jl1);
	panel.add(jl3);
	panel.add(jl2);

	JPanel jp = new JPanel();
	jp.setLayout(new GridLayout(1,2));
	jb1 = new JButton("Prev font");
	jb2 = new JButton("Next font");
	jp.add(jb1);
	jp.add(jb2);
	panel.add(jp);

	jb1.addActionListener(this);
	jb2.addActionListener(this);
	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);	
	// add here more code for GUI components
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
	if (e.getSource() == jb1)
	{
	    fontNumber--;
	    if (fontNumber < 0)
		fontNumber = availFonts.length + fontNumber;
	}
	else if (e.getSource() == jb2)
	    fontNumber = (fontNumber + 1) % availFonts.length;
	setLabels(fontNumber);
	panel.repaint();
   }
    
    public final void setLabels(int n)
    {
	jl1.setText((n+1) + ": \"" + availFonts[n] + "\"");
	jl2.setText(availFonts[n]);
	Font font = new Font(availFonts[n], Font.PLAIN, 24);
	jl2.setFont(new Font(availFonts[n], Font.PLAIN, 24));
	FontMetrics fm = panel.getFontMetrics(font);
	jl3.setText("(l, a, d, h) = (" + fm.getLeading() + ", "
                                    + fm.getAscent() + ", "
                                    + fm.getDescent() + ", "
                                    + fm.getHeight() + ")");
   }
}

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 
    }
}