FileDocCategorySizeDatePackage
LNFSwitcher.javaAPI DocExample2986Sat Jan 13 18:09:56 GMT 2001None

LNFSwitcher.java

import com.darwinsys.util.*;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.plaf.*;
import javax.swing.plaf.metal.*;

/**
 * A Look-and-feel switcher.
 * @author	Ian Darwin, ian@darwinsys.com
 * @version	$Id: LNFSwitcher.java,v 1.2 2001/01/13 23:09:57 ian Exp $
 */
public class LNFSwitcher {
	/** The frame. */
	protected JFrame theFrame;
	/** Its content pane */
	protected Container cp;

	/** Start with the Java look-and-feel, if possible */
	final static String PREFERREDLOOKANDFEELNAME =
		"javax.swing.plaf.metal.MetalLookAndFeel";
	protected String curLF = PREFERREDLOOKANDFEELNAME;
	protected JRadioButton previousButton;

	/** Construct a program... */
	public LNFSwitcher() {
		super();
		theFrame = new JFrame("LNF Switcher");
		theFrame.addWindowListener(new WindowCloser(theFrame, true));
		cp = theFrame.getContentPane();
		cp.setLayout(new FlowLayout());

		ButtonGroup bg = new ButtonGroup();

		JRadioButton bJava = new JRadioButton("Java");
		bJava.addActionListener(new LNFSetter(
			"javax.swing.plaf.metal.MetalLookAndFeel", bJava));
		bg.add(bJava);
		cp.add(bJava);

		JRadioButton bMSW  = new JRadioButton("MS-Windows");
		bMSW.addActionListener(new LNFSetter(
			"com.sun.java.swing.plaf.windows.WindowsLookAndFeel", bMSW));
		bg.add(bMSW);
		cp.add(bMSW);

		JRadioButton bMotif = new JRadioButton("Motif");
		bMotif.addActionListener(new LNFSetter(
			"com.sun.java.swing.plaf.motif.MotifLookAndFeel", bMotif));
		bg.add(bMotif);
		cp.add(bMotif);

		JRadioButton bMac = new JRadioButton("MacOS");
		bMac.addActionListener(new LNFSetter(
			"com.sun.java.swing.plaf.mac.MacLookAndFeel", bMac));
		bg.add(bMac);
		cp.add(bMac);

		// Following is a **hypothetical** addition!
		JRadioButton bOL = new JRadioButton("OPEN LOOK");
		bOL.addActionListener(new LNFSetter(
			 "com.darwinsys.openlook.OpenLookAndFeel", bOL));
		bOL.setEnabled(false);	// since it IS hypothetical
		bg.add(bOL);
		cp.add(bOL);

		// We "know" that the Java Look-and-feel is the default.
		previousButton = bJava;
		bJava.setSelected(true);

		theFrame.pack();
		theFrame.setVisible(true);
	}

	/* Class to set the Look and Feel on a frame */
	class LNFSetter implements ActionListener {
		String theLNFName;
		JRadioButton thisButton;

		/** Called to setup for button handling */
		LNFSetter(String lnfName, JRadioButton me) {
			theLNFName = lnfName;
			thisButton = me;
		}

		/** Called when the button actually gets pressed. */
		public void actionPerformed(ActionEvent e) {
			try {
				UIManager.setLookAndFeel(theLNFName);
				SwingUtilities.updateComponentTreeUI(theFrame);
			} catch (Exception evt) {
				JOptionPane.showMessageDialog(null,
					"setLookAndFeel didn't work: " + evt,
					"UI Failure", JOptionPane.INFORMATION_MESSAGE);
				previousButton.setSelected(true);		// reset the GUI to agree
			}
			previousButton = thisButton;
		}
	}

	public static void main(String[] argv) {
		new LNFSwitcher();
	}
}