import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class JavaVier extends Applet implements AdjustmentListener, ActionListener { private Scrollbar aantalCirkelsScroll; private Button resetButton, plus20Button; private TextField percentageEdit; private Image plaatje; private Color lightBlue = new Color(173, 216, 230); public void init() { this.setBackground(lightBlue); setLayout(null); aantalCirkelsScroll = new Scrollbar(Scrollbar.HORIZONTAL, 0, 1, 0, 201); percentageEdit = new TextField("0%"); resetButton = new Button("0"); plus20Button = new Button("+20"); this.add(aantalCirkelsScroll); this.add(percentageEdit); this.add(resetButton); this.add(plus20Button); aantalCirkelsScroll.addAdjustmentListener(this); resetButton .addActionListener(this); plus20Button .addActionListener(this); aantalCirkelsScroll.setBounds(10, 10, 440, 17); percentageEdit .setBounds(440, 470, 50, 25); resetButton .setBounds(460, 10, 30, 17); plus20Button .setBounds(460, 40, 30, 17); percentageEdit.setBackground(Color.yellow); percentageEdit.setForeground(Color.red); percentageEdit.setFont(new Font("SansSerif", Font.BOLD, 16)); percentageEdit.setEditable(false); plaatje = getImage(getDocumentBase(), "bclogo.gif"); } public void paint(Graphics pen) { pen.setColor(lightblue); pen.fill3DRect(0, 0, 500, 500, true); int aantal = aantalCirkelsScroll.getValue(); double deel = aantal / 200.0; pen.setColor(Color.black); pen.drawString("aantal cirkels=" + aantal, 10, 40); percentageEdit.setText((int) (deel * 100.0) + "%"); if (aantal > 0) { tekenCirkels(pen, aantal); int xCenter = 455; int yCenter = 425; double hoek = deel * 360.0; // binnenste taartpunt pen.setColor(Color.orange); pen.fillArc(xCenter - 40, yCenter - 40, 80, 80, 90, (int) hoek); // buitenste (overlappende) taartpunt pen.setColor(Color.red); pen.drawArc(xCenter - 40, yCenter - 40, 80, 80, 90, (int) hoek); if (aantal < 200) { pen.drawLine(xCenter, yCenter, xCenter, yCenter - 40); // verticaal lijntje this.tekenHoekLijn(pen, xCenter, yCenter, 40, hoek); } } int verschil = (int) (aantal * 1.6); pen.drawImage(plaatje, 10, 100 + verschil, 390 - verschil, 390 - verschil, this); } private void tekenCirkels(Graphics pen, int aantal) { if (aantal != 0) // deze regel is in dit geval overbodig, maar maakt de methode wel universeler for (int i = 0; i < aantal; i++) pen.drawOval(50, 50, 20 + i * 2, 20 + i * 2); } private void tekenHoekLijn(Graphics pen, int x, int y, int lengte, double hoek) { /* Het volgende tekent het diagonale lijntje. * Het zou niet eerlijk zijn om niet te vermelden dat ik deze berekeningen * heb afgekeken van het "Clock" voorbeeld applet (Clock2.class). * Zelf zou ik waarschijnlijk nooit de berekeningen bedacht kunnen hebben * (hoewel ik dat wel eerst geprobeerd heb), maar het gaat hier ook om * Java, en niet om wiskunde. */ double tussenUitkomst = -hoek * Math.PI / 180.0 - Math.PI / 2.0; pen.drawLine ( x, y, (int) (Math.cos(tussenUitkomst) * (double) lengte + (double) x), (int) (Math.sin(tussenUitkomst) * (double) lengte + (double) y) ); } public void adjustmentValueChanged(AdjustmentEvent e) { repaint(); } public void actionPerformed(ActionEvent e) { Object sender = e.getSource(); if (sender == resetButton) this.resetButtonAction(); else if (sender == plus20Button) this.plus20ButtonAction(); repaint(); } private void resetButtonAction() { aantalCirkelsScroll.setValue(0); } private void plus20ButtonAction() { int waarde = aantalCirkelsScroll.getValue(); waarde += 20; if (waarde > 200) waarde -= 200; aantalCirkelsScroll.setValue(waarde); } }