import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class JavaDrie extends Applet
implements ActionListener, AdjustmentListener
{
private Button startButton;
private Scrollbar roodScroll,
groenScroll,
blauwScroll,
autoXScroll,
autoYScroll,
autoBreedteScroll,
autoHoogteScroll;
private Color lightBlue = new Color(173, 216, 230);
public void init()
{
this.setBackground(lightBlue);
setLayout(null);
startButton = new Button("start");
roodScroll = new Scrollbar(Scrollbar.HORIZONTAL, 127, 1, 0, 256);
groenScroll = new Scrollbar(Scrollbar.HORIZONTAL, 127, 1, 0, 256);
blauwScroll = new Scrollbar(Scrollbar.HORIZONTAL, 127, 1, 0, 256);
autoXScroll = new Scrollbar(Scrollbar.HORIZONTAL, 80, 1, 23, 500 - 348 - 23);
autoYScroll = new Scrollbar(Scrollbar.VERTICAL , 110, 1, 59, 470 - 290 - 18);
autoBreedteScroll = new Scrollbar(Scrollbar.HORIZONTAL, 348, 1, 1, 500 - 23);
autoHoogteScroll = new Scrollbar(Scrollbar.VERTICAL , 290, 1, 1, 470 - 18);
this.add(startButton);
this.add(roodScroll);
this.add(groenScroll);
this.add(blauwScroll);
this.add(autoXScroll);
this.add(autoYScroll);
this.add(autoBreedteScroll);
this.add(autoHoogteScroll);
startButton .addActionListener(this);
roodScroll .addAdjustmentListener(this);
groenScroll .addAdjustmentListener(this);
blauwScroll .addAdjustmentListener(this);
autoXScroll .addAdjustmentListener(this);
autoYScroll .addAdjustmentListener(this);
autoBreedteScroll.addAdjustmentListener(this);
autoHoogteScroll .addAdjustmentListener(this);
startButton .setBounds( 24, 42, 36, 18);
autoXScroll .setBounds( 23, 5, 453, 18);
autoYScroll .setBounds( 5, 41, 18, 436);
autoBreedteScroll.setBounds( 23, 476, 453, 18);
autoHoogteScroll .setBounds(476, 41, 18, 436);
roodScroll .setBounds( 23, 23, 149, 18);
groenScroll .setBounds(176, 23, 149, 18);
blauwScroll .setBounds(327, 23, 149, 18);
}
public void paint(Graphics pen)
{
int rw = roodScroll .getValue();
int gw = groenScroll .getValue();
int bw = blauwScroll .getValue();
int x = autoXScroll .getValue();
int y = autoYScroll .getValue();
int breedte = autoBreedteScroll.getValue();
int hoogte = autoHoogteScroll .getValue();
pen.setColor(lightBlue);
// fill3DRect LIJKT beter te werken dan draw3DRect...
pen.fill3DRect(0, 0, 500, 500, true);
autoXScroll .setMaximum(500 - breedte - 23);
autoYScroll .setMaximum(470 - hoogte - 18);
autoBreedteScroll.setMaximum(500 - x - 23);
autoHoogteScroll .setMaximum(470 - y - 18);
pen.setColor(new Color(rw, gw, bw));
this.tekenAuto(pen, x, y, breedte, hoogte);
pen.setColor(Color.black);
pen.drawString("rood=" + rw, 70, 55);
pen.drawString("groen=" + gw, 220, 55);
pen.drawString("blauw=" + bw, 370, 55);
pen.drawString("x=" + x, 50, 470);
pen.drawString("y=" + y, 160, 470);
pen.drawString("breedte=" + breedte, 270, 470);
pen.drawString("hoogte=" + hoogte, 390, 470);
}
private void tekenAuto(Graphics pen, int x, int y, int breedte, int hoogte)
{
/* multiBreedte en multiHoogte zijn de kleinste hoogte en breedte die
* gebruikt gaan worden en als basis gaan dienen voor alle andere hoogtes
* en breedten (de "multipliers").
* De originele en aanbevolen verhouding (anders zijn de wielen niet meer
* rond maar ovaal) is:
* breedte : hoogte
* 6 : 5
* In dit geval was het niet meer mogelijk om de auto's een opschrift te
* geven, omdat alleen de hoogte en niet de breedte aangegeven kan worden.
*/
double multiBreedte = (double) breedte / 12.0;
double multiHoogte = (double) hoogte / 10.0;
// teken het bovenstuk
pen.drawLine((int) ((double) x + multiBreedte * 5.0), y, (int) ((double) x + multiBreedte * 3.0) , (int) ((double) y + multiHoogte * 4.0));
pen.drawLine((int) ((double) x + multiBreedte * 9.0), y, (int) ((double) x + multiBreedte * 11.0), (int) ((double) y + multiHoogte * 4.0));
pen.drawRect((int) ((double) x + multiBreedte * 5.0), y, (int) (multiBreedte * 4.0), (int) (multiHoogte * 4.0));
pen.fillRoundRect(x, (int) ((double) y + multiHoogte * 4.0), (int) (multiBreedte * 12.0), (int) (multiHoogte * 4.0), (int) multiBreedte, (int) multiHoogte);
// teken de wielen
this.tekenWiel(pen, (int) ((double) x + multiBreedte), (int) ((double) y + multiHoogte * 6.0), (int) (multiBreedte * 4.0), (int) (multiHoogte * 4.0));
this.tekenWiel(pen, (int) ((double) x + multiBreedte * 7.0), (int) ((double) y + multiHoogte * 6.0), (int) (multiBreedte * 4.0), (int) (multiHoogte * 4.0));
}
private void tekenWiel(Graphics pen, int x, int y, int breedte, int hoogte)
{
// bewaar de oude kleur om die later te kunnen herstellen
Color oudeKleur = pen.getColor();
// buitenste cirkel
pen.setColor(Color.black);
pen.fillOval(x, y, breedte, hoogte);
// binnenste cirkel
pen.setColor(Color.white);
pen.fillOval(x + breedte / 4, y + hoogte / 4, breedte / 2, hoogte / 2);
pen.setColor(oudeKleur);
}
public void actionPerformed(ActionEvent e)
{
// de maxima dienen eerst te worden aangepast
autoXScroll .setMaximum(500 - 348 - 23);
autoYScroll .setMaximum(470 - 290 - 18);
autoBreedteScroll.setMaximum(500 - 80 - 23);
autoHoogteScroll .setMaximum(470 - 110 - 18);
roodScroll .setValue(127);
groenScroll .setValue(127);
blauwScroll .setValue(127);
autoXScroll .setValue(80);
autoYScroll .setValue(110);
autoBreedteScroll.setValue(348);
autoHoogteScroll .setValue(290);
repaint();
}
public void adjustmentValueChanged(AdjustmentEvent e)
{
repaint();
}
}