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(); } }