FileDocCategorySizeDatePackage
FontChooser.javaAPI DocExample5482Tue Oct 09 16:22:42 BST 2001None

FontChooser

public class FontChooser extends Dialog
A font selection dialog. AWT version.

Note: can take a LONG time to start up on systems with (literally) hundreds of fonts.

author
Ian Darwin
version
$Id: FontChooser.java,v 1.13 2001/10/09 19:22:42 ian Exp $

Fields Summary
protected Font
resultFont
The font the user has chosen
protected String
resultName
The resulting font name
protected int
resultSize
The resulting font size
protected boolean
isBold
The resulting boldness
protected boolean
isItalic
The resulting italicness
protected String[]
fontList
The list of Fonts
protected List
fNameChoice
The file name chooser
protected List
fSizeChoice
The font size chooser
Checkbox
bold
The bold and italic choosers
Checkbox
italic
protected String[]
fontSizes
The list of font sizes
protected JLabel
previewArea
The display area. Use a JLabel as the AWT label doesn't always honor setFont() in a timely fashion :-)
Constructors Summary
public FontChooser(Frame f)
Construct a FontChooser -- Sets title and gets array of fonts on the system. Builds a GUI to let the user choose one font at one size.


	                            	 
	   
		super(f, "Font Chooser", true);

		Container cp = this;	// or getContentPane() in Swing

		Panel top = new Panel();
		top.setLayout(new FlowLayout());

		fNameChoice = new List(8);
		top.add(fNameChoice);

		Toolkit toolkit = Toolkit.getDefaultToolkit();
		// For JDK 1.1: returns about 10 names (Serif, SansSerif, etc.)
		// fontList = toolkit.getFontList();
		// For JDK 1.2: a much longer list; most of the names that come
		// with your OS (e.g., Arial), plus the Sun/Java ones (Lucida, 
		// Lucida Bright, Lucida Sans...)
		fontList = GraphicsEnvironment.getLocalGraphicsEnvironment().
			getAvailableFontFamilyNames();

		for (int i=0; i<fontList.length; i++)
			fNameChoice.add(fontList[i]);
		fNameChoice.select(0);

		fSizeChoice = new List(8);
		top.add(fSizeChoice);

		for (int i=0; i<fontSizes.length; i++)
			fSizeChoice.add(fontSizes[i]);
		fSizeChoice.select(5);

		cp.add(BorderLayout.NORTH, top);

		Panel attrs = new Panel();
		top.add(attrs);
		attrs.setLayout(new GridLayout(0,1));
		attrs.add(bold  =new Checkbox("Bold", false));
		attrs.add(italic=new Checkbox("Italic", false));

		previewArea = new JLabel("Qwerty Yuiop", JLabel.CENTER);
		previewArea.setSize(200, 50);
		cp.add(BorderLayout.CENTER, previewArea);

		Panel bot = new Panel();

		Button okButton = new Button("Apply");
		bot.add(okButton);
		okButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				previewFont();
				dispose();
				setVisible(false);
			}
		});

		Button pvButton = new Button("Preview");
		bot.add(pvButton);
		pvButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				previewFont();
			}
		});

		Button canButton = new Button("Cancel");
		bot.add(canButton);
		canButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// Set all values to null. Better: restore previous.
				resultFont = null;
				resultName = null;
				resultSize = 0;
				isBold = false;
				isItalic = false;

				dispose();
				setVisible(false);
			}
		});

		cp.add(BorderLayout.SOUTH, bot);

		previewFont(); // ensure view is up to date!

		pack();
		setLocation(100, 100);
	
Methods Summary
public java.awt.FontgetSelectedFont()
Retrieve the selected font, or null

		return resultFont;
	
public java.lang.StringgetSelectedName()
Retrieve the selected font name.

		return resultName;
	
public intgetSelectedSize()
Retrieve the selected size

		return resultSize;
	
public static voidmain(java.lang.String[] args)
Simple main program to start it running

		final JFrame f = new JFrame("Dummy");
		final FontChooser fc = new FontChooser(f);
		final Container cp = f.getContentPane();
		cp.setLayout(new GridLayout(0, 1));	// one vertical column

		JButton theButton = new JButton("Change font");
		cp.add(theButton);

		final JLabel theLabel = new JLabel("Java is great!");
		cp.add(theLabel);

		// Now that theButton and theLabel are ready, make the action listener
		theButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				fc.setVisible(true);
				Font myNewFont = fc.getSelectedFont();
				System.out.println("You chose " + myNewFont);
				theLabel.setFont(myNewFont);
				f.pack();	// again
				fc.dispose();
			}
		});

		f.pack();
		f.setVisible(true);
		f.addWindowListener(new WindowCloser(f, true));
	
protected voidpreviewFont()
Called from the action handlers to get the font info, build a font, and set it.

		resultName = fNameChoice.getSelectedItem();
		String resultSizeName = fSizeChoice.getSelectedItem();
		int resultSize = Integer.parseInt(resultSizeName);
		isBold = bold.getState();
		isItalic = italic.getState();
		int attrs = Font.PLAIN;
		if (isBold) attrs = Font.BOLD;
		if (isItalic) attrs |= Font.ITALIC;
		resultFont = new Font(resultName, attrs, resultSize);
		// System.out.println("resultName = " + resultName + "; " +
		//		 "resultFont = " + resultFont);
		previewArea.setFont(resultFont);
		pack();				// ensure Dialog is big enough.