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