J
javaner
Gast
guten tag.
habe noch 2 fragen zu meiner programmierten uhr. wie kann ich die 4 rechtecke als hintergrund definieren? damit die uhrziffern auf dem rechteck zu sehen sind und nicht von diesen überdeckt werden. trotz des threads flimmert mir der hintergrund irgendwie. gibt es da eine einfache variante zum das verhindern? vielen dank.
import java.awt.*;
import java.applet.*;
import java.util.*;
public class AnalogUhr extends Applet
{
/**Variablen deklarieren*/
Image time;
Graphics2D gtime;
Calendar date;
/**Zentrum und Radius*/
int x=125, y=100;
/**Hintergrund definieren*/
public void init() {
setBackground(new Color(255,255,255));
/**Thread zum anhalten des Applets. verhindert das flimmern*/
new Thread(new Runnable() {
public void run() {
while (true) {
try {Thread.sleep(1000);} catch (InterruptedException e) {}
repaint();
}
}}).start(); }
public void paint(Graphics g)
{
/**Uhr generieren und updaten*/
if (time==null) {
time=createImage(this.getSize().width, this.getSize().height);
gtime=(Graphics2D)time.getGraphics();
}
gtime.clearRect(0,0,this.getSize().width, this.getSize().height);
/**Zeiger Farbe und Form)*/
gtime.setColor(Color.black);
gtime.drawOval(x-2,x-2,4,4);
/**akutelle Systemzeit implementieren*/
date = new GregorianCalendar();
int hours = date.get(Calendar.HOUR_OF_DAY);
int minutes = date.get(Calendar.MINUTE);
int seconds = date.get(Calendar.SECOND);
int day = date.get(Calendar.DATE);
int month = (date.get(Calendar.MONTH))+1;
int year = date.get(Calendar.YEAR);
/**Striche bei 3, 6, 9 und 12 Uhr erstellen*/
for (int i=0;i<4;i++) {
gtime.drawLine(
x+(int)((y-7)*Math.cos(Math.toRadians(90*i))),
x+(int)((y-7)*Math.sin(Math.toRadians(90*i))),
x+(int)(y*Math.cos(Math.toRadians(90*i))),
x+(int)(y*Math.sin(Math.toRadians(90*i))));
}
/**Striche bei jeder Stunde erstellen*/
for (int i=0;i<12;i++) {
gtime.drawLine(
x+(int)((y-5)*Math.cos(Math.toRadians(30*i))),
x+(int)((y-5)*Math.sin(Math.toRadians(30*i))),
x+(int)(y*Math.cos(Math.toRadians(30*i))),
x+(int)(y*Math.sin(Math.toRadians(30*i))));
}
/**Stundenzeiger anzeigen*/
gtime.drawLine(
x,x,x+(int)(60*Math.cos(Math.toRadians(hours%12*30+minutes/2.0-90))),
x+(int)(60*Math.sin(Math.toRadians(hours%12*30+minutes/2.0-90))));
/**Minutenzeiger anzeigen*/
gtime.drawLine(
x,x,x+(int)(85*Math.cos(Math.toRadians(minutes*6-90))),
x+(int)(85*Math.sin(Math.toRadians(minutes*6-90))));
/**Sekundenzeiger anzeigen*/
gtime.setColor(new Color(170,170,170));
gtime.drawLine(
x,x,x+(int)(90*Math.cos(Math.toRadians(seconds*6-90))),
x+(int)(90*Math.sin(Math.toRadians(seconds*6-90))));
g.drawImage (time, 0, 0, this);
/**anzeige aktuelles datum und uhrzeit digital*/
g.drawString(""+day+". "+month+". "+year, 60,270);
g.drawString(""+hours+". "+minutes+". "+seconds, 130,270);
/**schweizerkreuz und rahmen*/
g.setColor(Color.red);
g.fillRect(0,0,85,85);
g.fillRect(160,0,85,85);
g.fillRect(0,160,85,85);
g.fillRect(160,160,85,85);
g.setColor(Color.black);
g.drawRect(0,0,245,245);
}
/**überschreiben und updaten*/
public void update(Graphics g) {paint(g);}
}
habe noch 2 fragen zu meiner programmierten uhr. wie kann ich die 4 rechtecke als hintergrund definieren? damit die uhrziffern auf dem rechteck zu sehen sind und nicht von diesen überdeckt werden. trotz des threads flimmert mir der hintergrund irgendwie. gibt es da eine einfache variante zum das verhindern? vielen dank.
import java.awt.*;
import java.applet.*;
import java.util.*;
public class AnalogUhr extends Applet
{
/**Variablen deklarieren*/
Image time;
Graphics2D gtime;
Calendar date;
/**Zentrum und Radius*/
int x=125, y=100;
/**Hintergrund definieren*/
public void init() {
setBackground(new Color(255,255,255));
/**Thread zum anhalten des Applets. verhindert das flimmern*/
new Thread(new Runnable() {
public void run() {
while (true) {
try {Thread.sleep(1000);} catch (InterruptedException e) {}
repaint();
}
}}).start(); }
public void paint(Graphics g)
{
/**Uhr generieren und updaten*/
if (time==null) {
time=createImage(this.getSize().width, this.getSize().height);
gtime=(Graphics2D)time.getGraphics();
}
gtime.clearRect(0,0,this.getSize().width, this.getSize().height);
/**Zeiger Farbe und Form)*/
gtime.setColor(Color.black);
gtime.drawOval(x-2,x-2,4,4);
/**akutelle Systemzeit implementieren*/
date = new GregorianCalendar();
int hours = date.get(Calendar.HOUR_OF_DAY);
int minutes = date.get(Calendar.MINUTE);
int seconds = date.get(Calendar.SECOND);
int day = date.get(Calendar.DATE);
int month = (date.get(Calendar.MONTH))+1;
int year = date.get(Calendar.YEAR);
/**Striche bei 3, 6, 9 und 12 Uhr erstellen*/
for (int i=0;i<4;i++) {
gtime.drawLine(
x+(int)((y-7)*Math.cos(Math.toRadians(90*i))),
x+(int)((y-7)*Math.sin(Math.toRadians(90*i))),
x+(int)(y*Math.cos(Math.toRadians(90*i))),
x+(int)(y*Math.sin(Math.toRadians(90*i))));
}
/**Striche bei jeder Stunde erstellen*/
for (int i=0;i<12;i++) {
gtime.drawLine(
x+(int)((y-5)*Math.cos(Math.toRadians(30*i))),
x+(int)((y-5)*Math.sin(Math.toRadians(30*i))),
x+(int)(y*Math.cos(Math.toRadians(30*i))),
x+(int)(y*Math.sin(Math.toRadians(30*i))));
}
/**Stundenzeiger anzeigen*/
gtime.drawLine(
x,x,x+(int)(60*Math.cos(Math.toRadians(hours%12*30+minutes/2.0-90))),
x+(int)(60*Math.sin(Math.toRadians(hours%12*30+minutes/2.0-90))));
/**Minutenzeiger anzeigen*/
gtime.drawLine(
x,x,x+(int)(85*Math.cos(Math.toRadians(minutes*6-90))),
x+(int)(85*Math.sin(Math.toRadians(minutes*6-90))));
/**Sekundenzeiger anzeigen*/
gtime.setColor(new Color(170,170,170));
gtime.drawLine(
x,x,x+(int)(90*Math.cos(Math.toRadians(seconds*6-90))),
x+(int)(90*Math.sin(Math.toRadians(seconds*6-90))));
g.drawImage (time, 0, 0, this);
/**anzeige aktuelles datum und uhrzeit digital*/
g.drawString(""+day+". "+month+". "+year, 60,270);
g.drawString(""+hours+". "+minutes+". "+seconds, 130,270);
/**schweizerkreuz und rahmen*/
g.setColor(Color.red);
g.fillRect(0,0,85,85);
g.fillRect(160,0,85,85);
g.fillRect(0,160,85,85);
g.fillRect(160,160,85,85);
g.setColor(Color.black);
g.drawRect(0,0,245,245);
}
/**überschreiben und updaten*/
public void update(Graphics g) {paint(g);}
}