Re: Java: Ständiges Repaint beim Drücken eines But
Hier das ist mein Quelltext. Ich hoffe man sieht einigermaßen durch. Wenn nicht beantworte ich gerne alle Fragen dazu.
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
public class Pi extends Applet implements ActionListener{
int innerhalb; // Variabel, die zählt wieviele Treffer innerhalb des Kreises sind
int auserhalb; // Treffer außerhalb
int hilf=1; // Anzahl der Würfe | dient als Index in den Speicherarrays x[] y[]
int dimension = 100000; // Anzahl der möglichen Punkte
int x[] = new int[dimension]; int y[] = new int[dimension];
public Button s1,s2,s3;
public void paint(Graphics g){
//
g.drawRect(0, 0, getWidth() - 1, getHeight() - 1); // zeichnet ein Rahmen um das Applet
g.drawOval(0, 0, 400, 400); // Der Kreis
g.drawRect(0, 0, 400, 400); // großes Quadrat
innerhalb = 0; // lokale Variabeln, zählen ob Treffer innerhalb oder außerhalb des Kreises sind
auserhalb = 0;
for (int i=1;i<hilf;i++){ // durchläuft alle Punkte
if (Math.sqrt((x[i]-200)*(x[i]-200)+(y[i]-200)*(y[i]-200))<200){ // prüft ob Treffer innerhalb sind
g.setColor(Color.red); // innen rot
g.fillOval(x[i], y[i], 3, 3);
innerhalb++;}
else{ // sonst Treffer außerhalb
g.setColor(Color.blue); // außen blau
g.fillOval(x[i], y[i], 3,3 );
auserhalb++;
}
// Ausgabe:
}
g.setColor(Color.black);
g.drawString("Punkte innerhalb des Kreises: "+innerhalb, 430, 270);
g.drawString("Punkte ausserhalb des Kreises: "+auserhalb, 430, 290);
int anzahl = auserhalb + innerhalb;
g.drawString("Anzahl der Würfe: "+anzahl,430,310);
double pi = (double) 4*innerhalb / anzahl;
g.drawString("Daraus ergibt sich: Pi = "+pi, 430, 330);
}
public void init(){
this.setSize(700,400);
s1 = new Button("10000 Würfe");
s2 = new Button("100 Würfe");
s3 = new Button("1 Wurf");
setLayout(null);
s1.setBounds(430,50,100,50);
s2.setBounds(430,120,100,50);
s3.setBounds(430,190,100,50);
add(s1);
add(s2);
add(s3);
s1.addActionListener(this);
s2.addActionListener(this);
s3.addActionListener(this);
}
public void actionPerformed(ActionEvent e){ // steuert, welcher Button angeklickt wurde
if (e.getSource() == s1){
zeichne(10000);
}
if (e.getSource() == s2){
zeichne(100);
}
if (e.getSource() == s3){
zeichne(1);
}
}
void zeichne(int anzahl){ // füllt den Speicherarray um anzahl plätze mit koordinaten, bisherige Koordinaten bleiben gespeichert.
try{
for (int i=hilf;i<=hilf+anzahl;i++){
x[i] = (int) (400*Math.random());
y[i] = (int) (400*Math.random());
}
hilf = hilf+anzahl;
repaint();
}
catch(Exception e){ // Wenn zu viele Punkte gesetzt werden
}
}
}