[ Home ]
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.