Donnidonis
Commander
- Registriert
- Apr. 2009
- Beiträge
- 2.712
Ich hab ein kleines Problem.
Ich hab ein kleines Applet geschireben, welches ca 100 Zeilen Code besitzt.
Mein Problem jedoch ist, wenn ich die repaint(); ausführe fängt es ziemlich an zu flackern, was mir nach ner Zeit auf die Nerven geht. Mein Applet ist eine kleine Analoguhr, mit Datumsanzeige und Digtaleranzeige.
Ich hab gelesen das Problem is mit "DoubleBuffering" zu lösen, nur ich weiß nicht wie ich das benutzen soll. Hab auch nichts gutes über Google gefunden.
Kann mir von euch wer Helfen?
Hier mein Code:
Ich hab ein kleines Applet geschireben, welches ca 100 Zeilen Code besitzt.
Mein Problem jedoch ist, wenn ich die repaint(); ausführe fängt es ziemlich an zu flackern, was mir nach ner Zeit auf die Nerven geht. Mein Applet ist eine kleine Analoguhr, mit Datumsanzeige und Digtaleranzeige.
Ich hab gelesen das Problem is mit "DoubleBuffering" zu lösen, nur ich weiß nicht wie ich das benutzen soll. Hab auch nichts gutes über Google gefunden.
Kann mir von euch wer Helfen?
Hier mein Code:
Code:
import java.applet.Applet;
import java.awt.*;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Uhr extends Applet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void init() {
setBackground(new Color(255, 255, 255));
}
public void paint(Graphics g) {
// Antialiasing
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
// Mittelpunkt
int mittelpunkt = 100;
int radius = 100;
// Uhrzeit
Calendar date = new GregorianCalendar();
int hours = date.get(Calendar.HOUR_OF_DAY);
int minutes = date.get(Calendar.MINUTE);
int seconds = date.get(Calendar.SECOND);
//Datum
String year = "" + date.get(Calendar.YEAR);
String month = "" + (date.get(Calendar.MONTH) + 1);
String day = "" + date.get(Calendar.DAY_OF_MONTH);
String datum = day + "." + month + "." + year;
//Uhr Digital
String shours = "" + hours;
String sminutes = "" + minutes;
String sseconds = "" + seconds;
String digital = shours + ":" + sminutes + ":" + sseconds;
//Striche bei jeder Stunde
for (int i = 0; i < 12; i++) {
g2.drawLine(
mittelpunkt + (int) ((radius - 15) * Math.cos(Math.toRadians(30 * i))),
mittelpunkt + (int) ((radius - 15) * Math.sin(Math.toRadians(30 * i))),
mittelpunkt + (int) (radius * Math.cos(Math.toRadians(30 * i))),
mittelpunkt + (int) (radius * Math.sin(Math.toRadians(30 * i))));
}
//Striche bei jeder Minute
for (int i=0;i<60;i++) {
g2.drawLine(
mittelpunkt + (int) ((radius - 2) * Math.cos(Math.toRadians(6 * i))),
mittelpunkt + (int) ((radius - 2) * Math.sin(Math.toRadians(6 * i))),
mittelpunkt + (int) (radius * Math.cos(Math.toRadians(6 * i))),
mittelpunkt + (int) (radius * Math.sin(Math.toRadians(6 * i))));
}
//Stunden
g2.drawLine(
mittelpunkt,mittelpunkt,mittelpunkt+(int)(60*Math.cos(Math.toRadians(hours%12*30+minutes/2.0-90))),
mittelpunkt+(int)(60*Math.sin(Math.toRadians(hours%12*30+minutes/2.0-90))));
//Minuten
g2.drawLine(
mittelpunkt,mittelpunkt,mittelpunkt+(int)(75*Math.cos(Math.toRadians(minutes*6-90))),
mittelpunkt+(int)(75*Math.sin(Math.toRadians(minutes*6-90))));
//Sekunden
g2.setColor(new Color(255,0,0));
g2.drawLine(
mittelpunkt,mittelpunkt,mittelpunkt+(int)(90*Math.cos(Math.toRadians(seconds*6-90))),
mittelpunkt+(int)(90*Math.sin(Math.toRadians(seconds*6-90))));
//Kreis in Mitte
g2.setColor(new Color (0,0,0));
g2.fillArc(97, 97, 6, 6, 0, 360);
//Datum
g2.setColor(Color.BLUE);
g2.setFont(new Font("", Font.PLAIN, 24));
g2.drawString(datum, 50, 75);
//Digitale Uhr
g2.setColor(Color.RED);
g2.setFont(new Font("", Font.PLAIN, 24));
g2.drawString(digital, 55, 150);
//Etwas warten
try {
Thread.sleep(500);
} catch (InterruptedException ex) {
System.out.println("Nicht möglich");
}
// Fenster erneuern
repaint();
}
}