import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Bounce2 extends JFrame implements ActionListener { BouncePanel2 canvas; JTextField speed; public Bounce2() { super("Tennis"); setSize(550, 450); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); BorderLayout border = new BorderLayout(); setLayout(border); // set up animation panel canvas = new BouncePanel2(); add(canvas, BorderLayout.CENTER); // set up speed panel JPanel speedPanel = new JPanel(); JLabel speedLabel = new JLabel("Speed: "); speed = new JTextField("100", 10); JButton speedSetter = new JButton("Set"); speedSetter.addActionListener(this); speedPanel.add(speedLabel); speedPanel.add(speed); speedPanel.add(speedSetter); add(speedPanel, BorderLayout.SOUTH); setVisible(true); } public static void main(String[] arguments) { Bounce2 af = new Bounce2(); } // monitor the Set button public void actionPerformed(ActionEvent event) { try { int speedValue = Integer.parseInt(speed.getText()); canvas.setDelay(speedValue); } catch (NumberFormatException exception) { // do nothing; invalid speed value } } }