⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 colorsliderpanel.java

📁 高级java2 大学教程(含源码,经典的Java学习教程
💻 JAVA
字号:
// Fig. 6.50 ColorSliderPanel.java
// ColorSliderPanel contains 3 SliderFieldPanels connected to
// indexed property redGreenBlue that adjusts the red, green
// and blue colors of an object.
package com.deitel.advjhtp1.beans;

// Java core packages
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.util.*;

// Java extension packages
import javax.swing.*;
import javax.swing.event.*;

public class ColorSliderPanel extends JPanel 
   implements Serializable {

   private JLabel redLabel, greenLabel, blueLabel;
   private SliderFieldPanel redSlider, greenSlider, blueSlider;
   private JPanel labelPanel, sliderPanel;
   private int[] redGreenBlue;
   public int RED_INDEX = 0;
   public int GREEN_INDEX = 1;
   public int BLUE_INDEX = 2;
   private Set listeners = new HashSet();

   // constructor for ColorSliderPanel
   public ColorSliderPanel()
   {
      // initialize redGreenBlue property
      redGreenBlue = new int[] { 0, 0, 0 };
      
      // initialize gui components for red slider
      redLabel = new JLabel( "Red:" ); 
      redSlider = new SliderFieldPanel();
      redSlider.setMinimumValue( 0 );
      redSlider.setMaximumValue( 255 );

      // initialize gui components for green slider
      greenLabel = new JLabel( "Green: " );
      greenSlider = new SliderFieldPanel();
      greenSlider.setMinimumValue( 0 );
      greenSlider.setMaximumValue( 255 );

      // initialize gui components for blue slider
      blueLabel = new JLabel( "Blue:" );
      blueSlider = new SliderFieldPanel();
      blueSlider.setMinimumValue( 0 );
      blueSlider.setMaximumValue( 255 );
      
      // set layout and add components
      setLayout( new BorderLayout() );
      
      labelPanel = new JPanel( new GridLayout( 3, 1 ) );
      labelPanel.add( redLabel );
      labelPanel.add( greenLabel );
      labelPanel.add( blueLabel );
      
      sliderPanel = new JPanel( new GridLayout( 3, 1 ) );
      sliderPanel.add( redSlider );
      sliderPanel.add( greenSlider );
      sliderPanel.add( blueSlider );
      
      add( labelPanel, BorderLayout.WEST );
      add( sliderPanel, BorderLayout.CENTER );
      
      // add PropertyChangeListener for redSlider
      redSlider.addPropertyChangeListener( 
      
         new PropertyChangeListener() {
            
            // handle propertyChange for redSlider
            public void propertyChange( PropertyChangeEvent 
               propertyChangeEvent )
            {
               setRedGreenBlue( RED_INDEX, 
                  redSlider.getCurrentValue() );
            }
         
         } // end anonymous inner class
         
      ); // end call to addPropertyChangeListener

      // add PropertyChangeListener for greenSlider
      greenSlider.addPropertyChangeListener(
      
         new PropertyChangeListener() {
            
            // handle propertyChange for greenSlider
            public void propertyChange( PropertyChangeEvent 
               propertyChangeEvent )
            {
               setRedGreenBlue( GREEN_INDEX, 
                  greenSlider.getCurrentValue() );
            }
            
         } // end anonymous inner class
         
      ); // end call to addPropertyChangeListener     

      // add PropertyChangeListener for blueSlider
      blueSlider.addPropertyChangeListener( 
      
         new PropertyChangeListener() {
            
            // handle propertyChange for blueSlider
            public void propertyChange( PropertyChangeEvent 
               propertyChangeEvent )
            {
               setRedGreenBlue( BLUE_INDEX, 
                  blueSlider.getCurrentValue() );
            }
            
         } // end anonymous inner class
         
      ); // end call to addPropertyChangeListener

   } // end ColorSliderPanel constructor
   
   // add ColorListener
   public void addColorListener( 
      ColorListener colorListener ) 
   {
      // listeners must be accessed atomically
      synchronized ( listeners ) {
         listeners.add( colorListener );
      }
   }
   
   // remove ColorListener
   public void removeColorListener( 
      ColorListener colorListener ) 
   {
      // listeners must be accessed by one thread only
      synchronized ( listeners ) {
         listeners.remove( colorListener );
      }
   }
   
   // fire ColorEvent
   public void fireColorChanged()
   {
      Iterator iterator;
      
      // listeners must be accessed atomically
      synchronized ( listeners ) {
         iterator = new HashSet( listeners ).iterator();
      }
      
      // create new Color with values of redGreenBlue
      // create new ColorEvent with color variable
      Color color = new Color( redGreenBlue[ RED_INDEX ], 
         redGreenBlue[ GREEN_INDEX ],
            redGreenBlue[ BLUE_INDEX ] );
      ColorEvent colorEvent = new ColorEvent( this, color );
      
      // notify all registered ColorListeners of ColorChange
      while ( iterator.hasNext() ) {
         ColorListener colorListener = ( ColorListener ) 
            iterator.next();
         colorListener.colorChanged( colorEvent );
      }
   }
   
   // get redGreenBlue property
   public int[] getRedGreenBlue()
   {
      return redGreenBlue;
   }

   // get redGreenBlue indexed property
   public int getRedGreenBlue( int index )
   {
      return redGreenBlue[ index ];
   }

   // set redGreenBlue property
   public void setRedGreenBlue( int[] array ) 
   {
      redGreenBlue = array;
   }
   
   // set redGreenBlue indexed property
   public void setRedGreenBlue( int index, int value ) 
   {
      redGreenBlue[ index ] = value;
      fireColorChanged();
   }

}  // end class ColorSliderPanel

/***************************************************************
 * (C) Copyright 2002 by Deitel & Associates, Inc. and         *
 * Prentice Hall. All Rights Reserved.                         *
 *                                                             *
 * DISCLAIMER: The authors and publisher of this book have     *
 * used their best efforts in preparing the book. These        *
 * efforts include the development, research, and testing of   *
 * the theories and programs to determine their effectiveness. *
 * The authors and publisher make no warranty of any kind,     *
 * expressed or implied, with regard to these programs or to   *
 * the documentation contained in these books. The authors     *
 * and publisher shall not be liable in any event for          *
 * incidental or consequential damages in connection with, or  *
 * arising out of, the furnishing, performance, or use of      *
 * these programs.                                             *
 ***************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -