// CurtainsApplet.java Copyright (c) Kari Laitinen // http://www.naturalprogramming.com // 2007-10-05 File created. // 2008-02-03 Latest modification. // This program shows how JSlider and JSpinner GUI components can be used. import java.awt.* ; import javax.swing.* ; import javax.swing.event.* ; class CurtainsPanel extends JPanel implements ChangeListener { // The word WINDOW in the following constants refers to the 'window' // that is drawn onto the screen by this program. static final Point WINDOW_UPPER_LEFT_CORNER = new Point( 150, 50 ) ; static final int WINDOW_WIDTH = 300, WINDOW_HEIGHT = 350 ; JSlider left_curtain_slider = new JSlider( SwingConstants.HORIZONTAL, 10, WINDOW_WIDTH / 2 + 10, WINDOW_WIDTH / 4 ) ; JSlider right_curtain_slider = new JSlider( SwingConstants.HORIZONTAL, 10, WINDOW_WIDTH / 2 + 10, WINDOW_WIDTH / 4 ) ; JSpinner red_color_spinner = new JSpinner( new SpinnerNumberModel( 255, 0, 255, 5 ) ) ; JSpinner green_color_spinner = new JSpinner( new SpinnerNumberModel( 50, 0, 255, 5 ) ) ; JSpinner blue_color_spinner = new JSpinner( new SpinnerNumberModel( 255, 0, 255, 5 ) ) ; JSpinner alpha_value_spinner = new JSpinner( new SpinnerNumberModel( 240, 0, 255, 5 ) ) ; JLabel red_color_label = new JLabel( "RED:" ) ; JLabel green_color_label = new JLabel( "GREEN:" ) ; JLabel blue_color_label = new JLabel( "BLUE:" ) ; JLabel alpha_value_label = new JLabel( "ALPHA:" ) ; int applet_width, applet_height ; public CurtainsPanel( int given_applet_width, int given_applet_height ) { applet_width = given_applet_width ; applet_height = given_applet_height ; setLayout( new BorderLayout() ) ; JPanel operations_panel = new JPanel( new GridLayout( 2, 1 ) ) ; JPanel curtain_adjustments_panel = new JPanel() ; JPanel color_adjustments_panel = new JPanel() ; right_curtain_slider.setInverted( true ) ; left_curtain_slider.addChangeListener( this ) ; right_curtain_slider.addChangeListener( this ) ; red_color_spinner.addChangeListener( this ) ; green_color_spinner.addChangeListener( this ) ; blue_color_spinner.addChangeListener( this ) ; alpha_value_spinner.addChangeListener( this ) ; curtain_adjustments_panel.add( left_curtain_slider ) ; curtain_adjustments_panel.add( right_curtain_slider ) ; color_adjustments_panel.add( red_color_label ) ; color_adjustments_panel.add( red_color_spinner ) ; color_adjustments_panel.add( green_color_label ) ; color_adjustments_panel.add( green_color_spinner ) ; color_adjustments_panel.add( blue_color_label ) ; color_adjustments_panel.add( blue_color_spinner ) ; color_adjustments_panel.add( alpha_value_label ) ; color_adjustments_panel.add( alpha_value_spinner ) ; operations_panel.add( curtain_adjustments_panel ) ; operations_panel.add( color_adjustments_panel ) ; add( "South", operations_panel ) ; } public void stateChanged( ChangeEvent event ) { repaint() ; } public void paintComponent( Graphics graphics ) { super.paintComponent( graphics ) ; graphics.setColor( Color.BLUE ) ; graphics.fillRect( WINDOW_UPPER_LEFT_CORNER.x, WINDOW_UPPER_LEFT_CORNER.y, WINDOW_WIDTH, WINDOW_HEIGHT / 2 ) ; graphics.setColor( Color.GREEN ) ; graphics.fillRect( WINDOW_UPPER_LEFT_CORNER.x, WINDOW_UPPER_LEFT_CORNER.y + WINDOW_HEIGHT / 2, WINDOW_WIDTH, WINDOW_HEIGHT / 2 ) ; graphics.setColor( Color.YELLOW ) ; // Color for the "sun" graphics.fillOval( WINDOW_UPPER_LEFT_CORNER.x + 50, WINDOW_UPPER_LEFT_CORNER.y + 50, 50, 50 ) ; graphics.setColor( Color.BLACK ) ; graphics.drawRect( WINDOW_UPPER_LEFT_CORNER.x, WINDOW_UPPER_LEFT_CORNER.y, WINDOW_WIDTH, WINDOW_HEIGHT ) ; graphics.drawLine( WINDOW_UPPER_LEFT_CORNER.x - 10, WINDOW_UPPER_LEFT_CORNER.y - 10, WINDOW_UPPER_LEFT_CORNER.x + WINDOW_WIDTH + 10, WINDOW_UPPER_LEFT_CORNER.y - 10 ) ; graphics.setColor( new Color( (Integer) red_color_spinner.getValue(), (Integer) green_color_spinner.getValue(), (Integer) blue_color_spinner.getValue(), (Integer) alpha_value_spinner.getValue())) ; graphics.fillRect( WINDOW_UPPER_LEFT_CORNER.x - 10, WINDOW_UPPER_LEFT_CORNER.y - 10, left_curtain_slider.getValue(), WINDOW_HEIGHT + 20 ) ; graphics.fillRect( WINDOW_UPPER_LEFT_CORNER.x + WINDOW_WIDTH + 10 - right_curtain_slider.getValue(), WINDOW_UPPER_LEFT_CORNER.y - 10, right_curtain_slider.getValue(), WINDOW_HEIGHT + 20 ) ; red_color_label.setForeground( new Color( (Integer) red_color_spinner.getValue(), 0, 0 ) ) ; green_color_label.setForeground( new Color( 0, (Integer) green_color_spinner.getValue(), 0 ) ) ; blue_color_label.setForeground( new Color( 0, 0, (Integer) blue_color_spinner.getValue() ) ) ; } } public class CurtainsApplet extends JApplet { public void init() { getContentPane().add( new CurtainsPanel( getSize().width, getSize().height ) ) ; } }