// MovingBallPanelApplication.java (c) Kari Laitinen // http://www.naturalprogramming.com // 2006-11-12 File created. // 2009-11-05 Latest modification. // This program works in the same way as MovingBallApplication.java. // The internal structure of this program is such that // an object of type MovingBallPanel actually represents // what the application shows on the screen. // The MovingBallPanel class is technically the same as in program // MovingBallPanelApplet.java import java.awt.* ; import java.awt.event.* ; import javax.swing.* ; class MovingBallPanel extends JPanel implements ActionListener, ItemListener { JButton left_button, up_button, down_button, right_button ; int frame_width, frame_height ; int ball_center_point_x, ball_center_point_y ; Color current_ball_color = Color.red ; public MovingBallPanel( int given_frame_width, int given_frame_height ) { frame_width = given_frame_width ; frame_height = given_frame_height ; ball_center_point_x = frame_width / 2 ; ball_center_point_y = frame_height / 2 ; setLayout( new BorderLayout() ) ; JPanel operations_panel = new JPanel() ; left_button = new JButton( " < " ) ; up_button = new JButton( " Up " ) ; down_button = new JButton( " Down " ) ; right_button = new JButton( " > " ) ; left_button.addActionListener( this ) ; up_button.addActionListener( this ) ; down_button.addActionListener( this ) ; right_button.addActionListener( this ) ; operations_panel.add( left_button ) ; operations_panel.add( up_button ) ; operations_panel.add( down_button ) ; operations_panel.add( right_button ) ; JComboBox color_selection_menu = new JComboBox() ; color_selection_menu.addItem( "red" ) ; color_selection_menu.addItem( "orange" ) ; color_selection_menu.addItem( "yellow" ) ; color_selection_menu.addItem( "green" ) ; color_selection_menu.addItem( "blue" ) ; color_selection_menu.addItem( "magenta" ) ; color_selection_menu.addItem( "cyan" ) ; color_selection_menu.addItem( "pink" ) ; color_selection_menu.addItem( "lightGray" ) ; color_selection_menu.addItemListener( this ) ; operations_panel.add( color_selection_menu ) ; add( "South", operations_panel ) ; } public void actionPerformed( ActionEvent event ) { if ( event.getSource() instanceof JButton ) { if ( event.getSource() == left_button ) { ball_center_point_x -= 3 ; } else if ( event.getSource() == up_button ) { ball_center_point_y -= 3 ; } else if ( event.getSource() == down_button ) { ball_center_point_y += 3 ; } else if ( event.getSource() == right_button ) { ball_center_point_x += 3 ; } repaint() ; } } public void itemStateChanged( ItemEvent menu_selection ) { String selected_color = (String) menu_selection.getItem() ; if ( selected_color.equals( "red" ) ) { current_ball_color = Color.red ; } else if ( selected_color.equals( "orange" ) ) { current_ball_color = Color.orange ; } else if ( selected_color.equals( "yellow" ) ) { current_ball_color = Color.yellow ; } else if ( selected_color.equals( "green" ) ) { current_ball_color = Color.green ; } else if ( selected_color.equals( "blue" ) ) { current_ball_color = Color.blue ; } else if ( selected_color.equals( "magenta" ) ) { current_ball_color = Color.magenta ; } else if ( selected_color.equals( "cyan" ) ) { current_ball_color = Color.cyan ; } else if ( selected_color.equals( "pink" ) ) { current_ball_color = Color.pink ; } else if ( selected_color.equals( "lightGray" ) ) { current_ball_color = Color.lightGray ; } repaint() ; } public void paintComponent( Graphics graphics ) { // The superclass version of paintComponent() clears the // component area and does other necessary things. super.paintComponent( graphics ) ; graphics.setColor( current_ball_color ) ; graphics.fillOval( ball_center_point_x - 50, ball_center_point_y - 50, 100, 100 ) ; graphics.setColor( Color.black ) ; graphics.drawString( "(" + ball_center_point_x + ", " + ball_center_point_y + ")", 20, 20 ) ; graphics.drawOval( ball_center_point_x - 50, ball_center_point_y - 50, 100, 100 ) ; } } class MovingBallPanelFrame extends JFrame { public static final int FRAME_WIDTH = 600 ; public static final int FRAME_HEIGHT = 480 ; public MovingBallPanelFrame() { setTitle( "MOVE THE BALL WITH THE BUTTONS" ) ; setSize( FRAME_WIDTH, FRAME_HEIGHT ) ; MovingBallPanel moving_ball_panel = new MovingBallPanel( FRAME_WIDTH, FRAME_HEIGHT ) ; Container content_pane = getContentPane() ; content_pane.add( moving_ball_panel ) ; } } public class MovingBallPanelApplication { public static void main( String[] not_in_use ) { MovingBallPanelFrame moving_ball_frame = new MovingBallPanelFrame() ; moving_ball_frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ) ; moving_ball_frame.setVisible( true ) ; } }