[ Home ]

Java Foundation Classes

Barrilleaux

Notes on Umpires

Double-buffering (as an application of inheritance).

Exercise: explain what happens here and why and how this is related to applets:

frilled.cs.indiana.edu%cat Ionesco.java
class Horse {
    int numberOfLegs = 4; 
    void greet() { talk(); }
    void talk() {
	System.out.println("Howdy!"); 
    }
} 

class Unicorn extends Horse { 
    Horn h;   
    void talk() {
	System.out.println("Bonjour!"); 
    }
} 

class Ionesco {
    public static void main(String[] args) {
	Horse a = new Unicorn(); 	
	a.greet(); 

    } 
} 

class Horn { } 

frilled.cs.indiana.edu%javac Ionesco.java

frilled.cs.indiana.edu%java Ionesco
Bonjour!
frilled.cs.indiana.edu%
Code for application of threads in teaching CS1:

frilled.cs.indiana.edu%ls -l
total 18
-rw-r--r--   1 dgerman  faculty       473 Nov  1 07:59 ActionList.java
-rw-r--r--   1 dgerman  faculty      2376 Nov  1 07:59 AppletFrame.java
-rw-r--r--   1 dgerman  faculty      1355 Nov  1 07:59 Dance.java
-rw-r--r--   1 dgerman  faculty       854 Nov  1 07:59 NoFlickerApplet.java
-rw-r--r--   1 dgerman  faculty      2261 Nov  1 07:59 One.java
-rw-r--r--   1 dgerman  faculty      3987 Nov  1 07:59 Penguin.java
-rw-r--r--   1 dgerman  faculty      4016 Nov  1 07:59 Rink.java
frilled.cs.indiana.edu%
Code for SliderTest:
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeListener;
import javax.swing.event.ChangeEvent;

public class SliderTest
{
  public static void main(String[] args)
  {
    SliderFrame frame = new SliderFrame();
    frame.setTitle("SliderTest");
    frame.show();
  }
}

class SliderFrame extends JFrame
{
  public SliderFrame()
  {
    final int DEFAULT_FRAME_WIDTH = 300;
    final int DEFAULT_FRAME_HEIGHT = 300;
    setSize(DEFAULT_FRAME_WIDTH, DEFAULT_FRAME_HEIGHT);
    addWindowListener(new WindowCloser());
    colorPanel = new JPanel();
    ColorListener listener = new ColorListener();

    redSlider = new JSlider(0, 100, 100);
    redSlider.addChangeListener(listener);

    greenSlider = new JSlider(0, 100, 70);
    greenSlider.addChangeListener(listener);


    blueSlider = new JSlider(0, 100, 100);
    blueSlider.addChangeListener(listener);

    JPanel southPanel = new JPanel();
    southPanel.setLayout(new GridLayout(3, 2));
    southPanel.add(new JLabel("Red", SwingConstants.RIGHT));
    southPanel.add(redSlider);
    southPanel.add(new JLabel("Green", SwingConstants.RIGHT));
    southPanel.add(greenSlider);
    southPanel.add(new JLabel("Blue", SwingConstants.RIGHT));
    southPanel.add(blueSlider);

    Container contentPane = getContentPane();
    contentPane.add(colorPanel, "Center");
    contentPane.add(southPanel, "South");

    setSampleColor();
  }

  public void setSampleColor()
  {
    float red = 0.01F * redSlider.getValue();
    float green = 0.01F * greenSlider.getValue();
    float blue = 0.01F * blueSlider.getValue();

    colorPanel.setBackground(new Color(red, green, blue));
    colorPanel.repaint();
  }
  
  private JPanel colorPanel;
  private JSlider redSlider;
  private JSlider greenSlider;
  private JSlider blueSlider;
   
  private class ColorListener implements ChangeListener
  {
    public void stateChanged(ChangeEvent event)
    {
      setSampleColor();
    }
  }

  private class WindowCloser extends WindowAdapter
  {
    public void windowClosing(WindowEvent event) 
    {
        System.exit(0);
    }
  }
} 

Here's another simple example.