Hi Leutz.
Ich hoffe ich werde nicht verschoben, aber das Thema passt irgendwie übewrall rein
Ich habe diese Frage schon in nem anderen Forum gestellt, aber es wurde leider nicht gelöst.
Ich hab nen JDesktopPane und auf diesen adde Ich das JPanel ClockPanel
jetzt ist mein Problem das ich jede sekunde das Rechteck "sauber" mache und dann alles neu Zeichne.
Deswegen bekomme ich kein Hintergrundbild rein(soll mal ein Ziffernblatt dahinter stehen).
das Problem in dieser Klasse das ich die drawImage() Methode schon gebrauche.. und deswegen das bild nicht einbinden kann. Denn sonst mache ich es so
kann mir bitte wer helfen.
mache da schon paar tage rum aber bekomm es einfach nicht hin.
Ich will doch nur nen hintergrund und dann die Zeiger darauf zeichnen!!
Danke schon mal..
MScalli
Ich hoffe ich werde nicht verschoben, aber das Thema passt irgendwie übewrall rein
Ich habe diese Frage schon in nem anderen Forum gestellt, aber es wurde leider nicht gelöst.
Ich hab nen JDesktopPane und auf diesen adde Ich das JPanel ClockPanel
Code:
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.JPanel;
public class ClockPanel extends JPanel {
Image buffer;
Graphics2D gBuffer;
int LAENGE_SEC = 37;
int LAENGE_MIN = 35;
int LAENGE_HOU = 25;
Calendar date;
int nn=50, r=40; // Zentrum und Radius
ClockPanel(){
setBounds(980,600,100,100);
setVisible(true);
}
public void paint(Graphics g) {
// Double-Buffering
if (buffer==null) {
buffer=createImage(this.getSize().width, this.getSize().height);
gBuffer=(Graphics2D)buffer.getGraphics();
}
gBuffer.clearRect(0,0,this.getSize().width, this.getSize().height);
// Antialiasing
gBuffer.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//gBuffer.drawOval(nn-2,nn-2,4,4);
// Striche bei 3, 6, 9 und 12 Uhr
for (int i=0;i<4;i++) {
gBuffer.drawLine(nn+(int)((r-7)*Math.cos(Math.toRadians(90*i))),nn+(int)((r-7)*Math.sin(Math.toRadians(90*i))),nn+(int)(r*Math.cos(Math.toRadians(90*i))),nn+(int)(r*Math.sin(Math.toRadians(90*i))));
}
// Striche bei jeder Stunde
for (int i=0;i<12;i++) {
gBuffer.drawLine(nn+(int)((r-5)*Math.cos(Math.toRadians(30*i))),nn+(int)((r-5)*Math.sin(Math.toRadians(30*i))),nn+(int)(r*Math.cos(Math.toRadians(30*i))),nn+(int)(r*Math.sin(Math.toRadians(30*i))));
}
// Striche bei jeder Minute (optional)
for (int i=0;i<60;i++) {
gBuffer.drawLine(nn+(int)((r-2)*Math.cos(Math.toRadians(6*i))),nn+(int)((r-2)*Math.sin(Math.toRadians(6*i))),nn+(int)(r*Math.cos(Math.toRadians(6*i))),nn+(int)(r*Math.sin(Math.toRadians(6*i))));
}
date = new GregorianCalendar();
int hours = date.get(Calendar.HOUR_OF_DAY);
int minutes = date.get(Calendar.MINUTE);
int seconds = date.get(Calendar.SECOND);
// Stunden
gBuffer.drawLine(nn,nn,nn+(int)(LAENGE_HOU*Math.cos(Math.toRadians(hours%12*30+minutes/2.0-90))),nn+(int)(LAENGE_HOU*Math.sin(Math.toRadians(hours%12*30+minutes/2.0-90))));
// Minuten
gBuffer.drawLine(nn,nn,nn+(int)(LAENGE_MIN*Math.cos(Math.toRadians(minutes*6-90))),nn+(int)(LAENGE_MIN*Math.sin(Math.toRadians(minutes*6-90))));
// Sekunden
gBuffer.drawLine(nn,nn,nn+(int)(LAENGE_SEC*Math.cos(Math.toRadians(seconds*6-LAENGE_SEC))),nn+(int)(LAENGE_SEC*Math.sin(Math.toRadians(seconds*6-LAENGE_SEC))));
g.drawImage (buffer, 0, 0, this);
// Verzögerung
try {Thread.sleep(50);}
catch (InterruptedException e) {}
repaint();
}
public void update(Graphics g) {paint(g);}
}
jetzt ist mein Problem das ich jede sekunde das Rechteck "sauber" mache und dann alles neu Zeichne.
Deswegen bekomme ich kein Hintergrundbild rein(soll mal ein Ziffernblatt dahinter stehen).
das Problem in dieser Klasse das ich die drawImage() Methode schon gebrauche.. und deswegen das bild nicht einbinden kann. Denn sonst mache ich es so
Code:
g.drawImage(MyParam.ICON_BACKGROUND.getImage(), 0, 0, getSize().width, getSize().height, null);
kann mir bitte wer helfen.
mache da schon paar tage rum aber bekomm es einfach nicht hin.
Ich will doch nur nen hintergrund und dann die Zeiger darauf zeichnen!!
Danke schon mal..
MScalli