Lieder ist mir keine passende Beschreibung in den Sinn gekommen die das Problem erklärt.
Es geht um folgendes. Ich erzeuge eine Grafik einer Analogen Uhr und weise dem Stunden und Minuten Zeiger Werte mittels einer Funktion zu die wiederum einer Globalen Variable diesen Wert zuweisen soll.
Wenn ich Im Frame versuche den wert auszulesen ist da immer noch 0. erst bei einem repaint() kommen die alten werte. Der Wert der Aktuellen Stunden z.B. ist der Vorherige und nicht der Aktuelle.
Kann jemand helfen? Habe etliches versucht jedoch ohne richtiges Ergebnis.
Danke
Es geht um folgendes. Ich erzeuge eine Grafik einer Analogen Uhr und weise dem Stunden und Minuten Zeiger Werte mittels einer Funktion zu die wiederum einer Globalen Variable diesen Wert zuweisen soll.
Wenn ich Im Frame versuche den wert auszulesen ist da immer noch 0. erst bei einem repaint() kommen die alten werte. Der Wert der Aktuellen Stunden z.B. ist der Vorherige und nicht der Aktuelle.
Java:
public class Clock3 extends javax.swing.JPanel {
public static int stunde = 0;
public static int minut = 0;
/**
* Creates new form Clock3
*/
public Clock3() {
initComponents();
setPreferredSize(new Dimension(size, size));
//setBackground(Color.white);
/*new Timer(1000, (ActionEvent e) -> {
repaint();
}).start();*/
}
public static int sethour(){
stunde = (int) (Math.random() * 23-0) + 0;
return stunde;
}
public static int setminute(){
minut = (int) (Math.random() * 59-0) + 0;
return minut;
}
final float degrees06 = (float) (PI / 30);
final float degrees30 = degrees06 * 5;
final float degrees90 = degrees30 * 3;
final int size = 400;
final int spacing = 40;
final int diameter = size - 2 * spacing;
final int cx = diameter / 2 + spacing;
final int cy = diameter / 2 + spacing;
@Override
public void paintComponent(Graphics gg) {
super.paintComponent(gg);
Graphics2D g = (Graphics2D) gg;
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
drawFace(g);
// final LocalTime time = LocalTime.now();
int hour = sethour();
int minute = setminute();
//int hour = stunde;
//int minute = minut;
int second = 00;
float angle = degrees90 - (degrees06 * second);
// drawHand(g, angle, diameter / 2 - 30, Color.red);
float minsecs = (minute + second / 60.0F);
angle = degrees90 - (degrees06 * minsecs);
drawHand(g, angle, diameter / 3 + 10, Color.black);
float hourmins = (hour + minsecs / 60.0F);
angle = degrees90 - (degrees30 * hourmins);
drawHand(g, angle, diameter / 4 + 10, Color.black);
}
private void drawFace(Graphics2D g) {
g.setStroke(new BasicStroke(2));
g.setColor(Color.white);
g.fillOval(spacing, spacing, diameter, diameter);
g.setColor(Color.black);
g.drawOval(spacing, spacing, diameter, diameter);
}
private void drawHand(Graphics2D g, float angle, int radius, Color color) {
int x = cx + (int) (radius * cos(angle));
int y = cy - (int) (radius * sin(angle));
g.setColor(color);
g.drawLine(cx, cy, x, y);
}
public int getHour(){
return Clock3.stunde;
}
public int getMinute(){
return Clock3.minut;
}
}
Kann jemand helfen? Habe etliches versucht jedoch ohne richtiges Ergebnis.
Danke
Zuletzt bearbeitet von einem Moderator: