import java.awt.*;
import java.awt.event.*;
import java.net.URL;
import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JComponent;
import javax.swing.JApplet;
import javax.swing.ImageIcon;

public class AppletDemo extends JApplet
                        implements java.awt.event.ActionListener {

    protected JButton b1, b2, b3;
    protected String leftButtonFilename = "images/right.gif";
    protected String middleButtonFilename = "images/middle.gif";
    protected String rightButtonFilename = "images/left.gif";

    private boolean inAnApplet = true;

    //Hack to avoid ugly message about system event access check.
    public AppletDemo() {
	this(true);
    }

    public AppletDemo(boolean inAnApplet) {
	this.inAnApplet = inAnApplet;
	if (inAnApplet) {
            getRootPane().putClientProperty("defeatSystemEventQueueCheck",
                                            Boolean.TRUE);
	}
    }

    public void init() {
	ImageIcon leftButtonIcon;
	ImageIcon middleButtonIcon;
	ImageIcon rightButtonIcon;

	if (inAnApplet) {
	    //JComponent.setApplet(this); //no longer necessary
	    URL leftButtonURL = getURL(leftButtonFilename);
	    URL middleButtonURL = getURL(middleButtonFilename);
	    URL rightButtonURL = getURL(rightButtonFilename);

	    leftButtonIcon = new ImageIcon(leftButtonURL);
	    middleButtonIcon = new ImageIcon(middleButtonURL);
	    rightButtonIcon = new ImageIcon(rightButtonURL);
	} else {
	    leftButtonIcon = new ImageIcon(leftButtonFilename);
	    middleButtonIcon = new ImageIcon(middleButtonFilename);
	    rightButtonIcon = new ImageIcon(rightButtonFilename);
	}

        b1 = new JButton("Disable middle button", leftButtonIcon);
	b1.setVerticalTextPosition(AbstractButton.CENTER);
	b1.setHorizontalTextPosition(AbstractButton.LEFT);
	b1.setMnemonic('d');
	b1.setActionCommand("disable");

        b2 = new JButton("Middle button", middleButtonIcon);
	b2.setVerticalTextPosition(AbstractButton.BOTTOM);
	b2.setHorizontalTextPosition(AbstractButton.CENTER);
	b2.setMnemonic('m');

        b3 = new JButton("Enable middle button", rightButtonIcon);
	//Use the default text position of CENTER, RIGHT.
	b3.setMnemonic('e');
	b3.setActionCommand("enable");
        b3.setEnabled(false);

	//Listen for actions on buttons 1 and 3.
	b1.addActionListener(this);
	b3.addActionListener(this);

        //Add Components to a JPanel, using the default FlowLayout. 
	JPanel pane = new JPanel();
        pane.add(b1);
        pane.add(b2);
        pane.add(b3);

	getContentPane().add("Center", pane);
    }

    public void actionPerformed(java.awt.event.ActionEvent e) {
        if (e.getActionCommand().equals("disable")) {
            b2.setEnabled(false);
            b1.setEnabled(false);
            b3.setEnabled(true);
        } else { 
            b2.setEnabled(true);
            b1.setEnabled(true);
            b3.setEnabled(false);
        }
    }
    
    protected URL getURL(String filename) {
        URL codeBase = getCodeBase();
	URL url = null;

	try {
	    url = new URL(codeBase, filename);
	} catch (java.net.MalformedURLException e) {
	    System.out.println("Couldn't create image: badly specified URL");
	    return null;
	}

	return url;
    }
    
    public static void main(String[] args) {
	Frame frame = new Frame("Application: AppletDemo");

	WindowListener l = new WindowAdapter() {
	    public void windowClosing(WindowEvent e) {System.exit(0);}
	};
	frame.addWindowListener(l);

	AppletDemo applet = new AppletDemo(false);
	applet.init();
	frame.add("Center", applet);
	frame.pack();
	frame.show();
    }
}
