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