Computer Science 252
Problem Solving with Java
Fall 2013, The College of Saint Rose
FallingBallComboButton Demo
A working demo of FallingBallComboButton will appear below. Click inside the applet to interact with it.
FallingBallComboButton BlueJ Project
Click here to download a BlueJ project for FallingBallComboButton.
FallingBallComboButton Source Code
The Java source code for FallingBallComboButton is below. Click on a file name to download it.
import objectdraw.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JPanel; /* * Example FallingBallComboButton: just one Swing JButton * to create a ball, but select speed based on the contents * of a JComboBox. * * Jim Teresco, The College of Saint Rose, Fall 2013 * Based on example from Williams College CS 134. * * $Id: FallingBallComboButton.java 2221 2013-10-22 02:48:35Z terescoj $ */ public class FallingBallComboButton extends WindowController implements ActionListener { private static final int SLOW_SPEED = 2; private static final int MEDIUM_SPEED = 5; private static final int FAST_SPEED = 10; // we'll be using a JComboBox in begin and in // actionPerformed, so we need to remember it. private JComboBox speedMenu; public void begin() { setSize(500, 500); // We still need our content pane Container contentPane = getContentPane(); // A JPanel, in which we will group together our JButton // and JComboBox JPanel southPanel = new JPanel(); // Next, we'll create just one button and add it to our // JPanel. JButton createBallButton = new JButton("Drop Ball"); southPanel.add(createBallButton); // construct a JComboBox speedMenu = new JComboBox(); // and some menu entries therein speedMenu.addItem("Slow"); speedMenu.addItem("Medium"); speedMenu.addItem("Fast"); // which one is selected when we start? speedMenu.setSelectedItem("Medium"); // and put our JComboBox into our JPanel southPanel.add(speedMenu); // now, we add the JPanel (which contains our JButton // and JComboBox) to the content pane, in the south contentPane.add(southPanel, BorderLayout.SOUTH); // add our action listener createBallButton.addActionListener(this); // put at end of all methods that change the layout contentPane.validate(); } // actionPerformed method now doesn't need to check // which button was pressed - there's just the one. // But it does need to check the currently selected // menu item public void actionPerformed(ActionEvent e) { double speed; // this will return the selected item from the JComboBox Object selectedSpeed = speedMenu.getSelectedItem(); // now we see which one it is by comparing to the Strings // we used when we added the menu items above. if (selectedSpeed.equals("Slow")) { speed = SLOW_SPEED; } else if (selectedSpeed.equals("Medium")) { speed = MEDIUM_SPEED; } else { // "Fast" is the only other possibility speed = FAST_SPEED; } new Ball(new Location(200, 0), speed, canvas); } }
import objectdraw.*; import java.awt.*; /* /* * Example FallingBallUglyButtons: * A Ball that will drop to the bottom of the canvas. * * Jim Teresco, The College of Saint Rose, Fall 2013 * * $Id: Ball.java 2221 2013-10-22 02:48:35Z terescoj $ */ public class Ball extends ActiveObject { private static final int BALL_SIZE = 30; private static final int PAUSE_TIME = 30; // The representation of the ball on the screen private FilledOval ball; // The bottom of the playing area private int bottomHeight; private double ySpeed; // Construct a new Ball with the given starting location and y velocity. public Ball(Location point, double speed, DrawingCanvas aCanvas) { ball = new FilledOval(point, BALL_SIZE, BALL_SIZE, aCanvas); ySpeed = speed; bottomHeight = aCanvas.getHeight(); start(); } public void run() { while (ball.getY() < bottomHeight) { ball.move(0, ySpeed); pause(PAUSE_TIME); } ball.removeFromCanvas(); } }