/* Bounce.java The Bounce class is the applet. It does initialization, sets up the user interface, handles user events, and lets the Stage class do everything else. */ import java.awt.*; import java.lang.*; import java.applet.*; import java.net.*; public class Bounce extends Applet { public Stage stage; public AudioClip sound; public URL url; GridBagLayout layout; Button addButton = new Button( "add ball" ); Button fastButton = new Button( "faster" ); Button slowButton = new Button( "slower" ); public void init() { setBackground( Color.white ); layout = new GridBagLayout(); setLayout( layout ); int width = Integer.parseInt( getParameter( "width" ).trim() ); int height = Integer.parseInt( getParameter( "height" ).trim() ); stage = new Stage( this,width-100,height-50 ); constrain( stage,this,layout,1,0,1,3, GridBagConstraints.NONE, GridBagConstraints.CENTER, 0,0 ); constrain( addButton,this,layout,0,0,1,1, GridBagConstraints.BOTH, GridBagConstraints.CENTER, 0.3,0 ); constrain( fastButton,this,layout,0,1,1,1, GridBagConstraints.BOTH, GridBagConstraints.CENTER, 0.3,0 ); constrain( slowButton,this,layout,0,2,1,1, GridBagConstraints.BOTH, GridBagConstraints.CENTER, 0.3,0 ); try { url = new URL( "http://www.cs.columbia.edu/~cs3157/examples/bounce/ding.au" ); sound = getAudioClip( url ); sound.play(); } catch( MalformedURLException murlx ) { System.out.println( "error: " + murlx ); } } // end of init() public void start() { stage.start(); } // end of start() public void stop() { stage.stop(); } // end of stop() public void destroy() { } // end of destroy() public boolean action( Event evt, Object arg ) { if ( evt.id == Event.ACTION_EVENT ) { if ( evt.target == addButton ) { stage.addBall(); return true; } else if ( evt.target == fastButton ) { stage.faster(); return true; } else if ( evt.target == slowButton ) { stage.slower(); return true; } } return false; } // end of action() /*----- constrain --------------------------------------*/ /** * This method adds Component component to * Container container with a * GridBagLayout layout manager, * according to the constraint values specified by the * method arguments. * * @param component component to add * * @param container container to which * "component" is added * * @param layout grid bag layout manager * for "container" * * @param gridx the left-most cell of the * component's display area * * @param gridy the top-most cell of the * component's display area * * @param gridwidth number of cells in a row * for component's display area * * @param gridheight number of cells in a column * for component's display area * * @param fill indicates, when the * component's display area is * larger than the component's * requested size, whether/how * to resize the component * * @param anchor indicates, when the * component is smaller than * its display area, where to * place the component within * the area * * @param weightx how to distribute extra * vertical space * * @param weighty how to distribute extra * horizontal space * */ public static void constrain( Component component, Container container, GridBagLayout layout, int gridx, int gridy, int gridwidth, int gridheight, int fill, int anchor, double weightx, double weighty ) { GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = gridx; gbc.gridy = gridy; gbc.gridwidth = gridwidth; gbc.gridheight = gridheight; gbc.fill = fill; gbc.anchor = anchor; gbc.weightx = weightx; gbc.weighty = weighty; layout.setConstraints( component,gbc ); container.add( component ); } // end of constrain() } // end of Bounce class