/**************************************************/
/* Prof. Dr. Carsten Vogt                         */
/* FH Koeln, Fak. 07 / Nachrichtentechnik         */
/* http://www.nt.fh-koeln.de/vogt                 */
/*                                                */
/* Das Programm zeigt die Verwendung von Slidern. */
/**************************************************/

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;

class SliderDemo extends JFrame {

  // Drei Slider, mit denen der Rot-, Blau- und Gruenanteil
  // eines zweiten Frames festgelegt werden:
  // (Parameter: Ausrichtung, min. / max. / voreingestellter Wert)

  JSlider redSlider = new JSlider(JSlider.HORIZONTAL,0,255,255);
  JSlider greenSlider = new JSlider(JSlider.HORIZONTAL,0,255,0);
  JSlider blueSlider = new JSlider(JSlider.HORIZONTAL,0,255,0);

  // Frame, dessen Farbe geaendert werden soll:
  
  Frame frm;

  // Konstruktor: Erzeugung der Grafik-Oberflaeche:

  SliderDemo(String s) {

   // Erzeugen und Positionieren des Fensterrahmens:

   super(s);
   setLocation(100,200);
 
   // Erzeugung des Frames, dessen Farbe geaendert werden soll:

   frm = new Frame();
   frm.setSize(new Dimension(200,200));
   frm.setLocation(480,200);
   frm.setBackground(Color.red);
   frm.setVisible(true);

   // Box fuer Rechteck und Slider:

   Box b = Box.createVerticalBox();
   getContentPane().add(b);

   // Hilfsvariable fuer Texte:

   JLabel lab;
 
   // Überschrift:

   lab = new JLabel("Slider zur Farbgestaltung:");
   lab.setFont(new Font("Arial",Font.BOLD,22));
   lab.setForeground(Color.black);
   b.add(lab);

   // Slider:

   lab = new JLabel("Rot-Anteil:");
   lab.setFont(new Font("Arial",Font.BOLD,22));
   lab.setForeground(Color.black);
   b.add(lab);
   // Festlegung der Anzeige der Skala:
   redSlider.setPaintLabels(true);
   redSlider.setPaintTicks(true);
   redSlider.setMajorTickSpacing(32);
   redSlider.setMinorTickSpacing(16);
   b.add(redSlider);

   lab = new JLabel("Gruen-Anteil:");
   lab.setFont(new Font("Arial",Font.BOLD,22));
   lab.setForeground(Color.black);
   b.add(lab);
   greenSlider.setPaintLabels(true);
   greenSlider.setPaintTicks(true);
   greenSlider.setMajorTickSpacing(32);
   greenSlider.setMinorTickSpacing(16);
   b.add(greenSlider);

   lab = new JLabel("Blau-Anteil:");
   lab.setFont(new Font("Arial",Font.BOLD,22));
   lab.setForeground(Color.black);
   b.add(lab);
   blueSlider.setPaintLabels(true);
   blueSlider.setPaintTicks(true);
   blueSlider.setMajorTickSpacing(32);
   blueSlider.setMinorTickSpacing(16);
   b.add(blueSlider);

   // Listener erzeugen und an die Slider anbinden:

   SliderListener sl = new SliderListener();
   redSlider.addChangeListener(sl);
   greenSlider.addChangeListener(sl);
   blueSlider.addChangeListener(sl);

   // Komponenten anordnen und sichtbar machen:

   pack();
   setVisible(true);

  }

  // Listener fuer Slider-Aenderungen:

  class SliderListener implements ChangeListener {

   // Aktion, wenn sich Zustand des Sliders aendert: 

   public void stateChanged(ChangeEvent e) {

    // Neue Farbe ergibt sich aus den Werten der Slider:

    frm.setBackground(new Color(redSlider.getValue(),greenSlider.getValue(),blueSlider.getValue()));

   }

  }

}

// Hauptprogramm

public class Slider {

  public static void main(String args[]) {

   new SliderDemo("Farbmischung");  

  }

}

