2016-05-06 7 views
-5

Für meine Programmierklasse arbeite ich an einer Uhr. Die Uhr muss zu einem Anfangszeitpunkt eingestellt werden, was ich nicht herausfinden kann. Die Uhr, mit der ich gerade arbeite, verwendet nur die Systemzeit. Ich habe versucht, eine Zeit mit cal.set einstellen, aber dann friert es nur auf, was ich will, um die erste Zeit und Zeit wird nicht voran. Wie kann ich das bearbeiten, damit ich eine Startzeit habe, aber die Uhr noch funktioniert? Paket Uhr;Setze eine analoge Uhr mit einer Anfangszeit unter Verwendung von Java

package Clock; 

import java.applet.Applet; 
import java.awt.Color; 
import java.lang.Object; 
import javax.swing.JPanel; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Image; 
import javax.swing.JFrame; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
public class Component extends Applet implements Runnable { 
private static final long serialVersionUID = 1L; 

public static String name = "My Clock"; 

public static int size = 600; 

public static boolean isRunning = false; 

public static Graphics g; 

public static Image screen; 

public Numbers number; 

public static JFrame frame; 

public static void main(String [] args) { 
    Component component = new Component(); 

    frame = new JFrame(); 
    frame.add(component); 
    frame.setSize(size+6, size + 28); 
    frame.setTitle(name); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setResizable(false); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 

    component.start(); 
} 

public void start() { 
    requestFocus(); 

    number = new Numbers(); 

    isRunning = true; 
    Thread th = new Thread(this); 
    th.start(); 
} 

public void run() { 
    screen = createVolatileImage(size, size); 
    while (isRunning) { 
     tick(); 
     render(g); 
     try { 
      Thread.sleep(1); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

public void tick() { 

} 

public double time; 
public int anim; 
public int anim2; 
public int anim3; 
public int anim4; 
public int center = size/2; 
public int radius = (size-40)/2; 

public void render(Graphics g) { 
    // Drawing to image 

    screen = createImage(size, size); 
    g = screen.getGraphics(); 

    //Drawing the background 

    g.setColor(Color.LIGHT_GRAY); 
    g.fillRect(0, 0, size, size); 

    // Drawing the frame(outside circle) 

    g.setColor(Color.black); 
    g.fillOval(5, 5, size - 10, size - 10); 
    g.setColor(Color.white); 
    //g.setColor(new Color(new Random().nextInt(255). new Random().nextInt(255), new Random().nextInt(255))); 
    //g.drawOval(10, 10, size - 20, size - 20); 
    g.fillOval(20, 20, size - 40, size - 40); 

    number.render(g); 

    // Math and Drawing for Lines 

    for (int i = 0; i < 60; i++) { 
     radius = size - 40; 
     anim = center + (int) ((Math.sin(i % 60.0/60 * Math.PI * 2) * (radius/2))); 
     anim2 = center - (int) ((Math.cos(i % 60.0/60 * Math.PI * 2) * (radius/2))); 
     radius = size - 60; 
     anim3 = center + (int) ((Math.sin(i % 60.0/60 * Math.PI * 2) * (radius/2))); 
     anim4 = center - (int) ((Math.cos(i % 60.0/60 * Math.PI * 2) * (radius/2))); 
     g.drawLine(anim, anim2, anim3, anim4); 
    } 

    // Math for hour hand 

    radius = size - 140; 
    // time = System.currentTimeMillis() % 3600000/3600000 * Math.PI; 
    int t = (int) (System.currentTimeMillis() + 17300000) + 3600000+ 3600000 + 3600000 + 3600000 + 3600000 + 3600000 + 3600000 + 3600000; 
    anim = center 
      + (int) ((Math.sin(t % 43200000.0 
        /43200000 * Math.PI * 2) * (radius/2))) + 7; 
    anim2 = center 
      - (int) ((Math.cos(t % 43200000.0 
        /43200000 * Math.PI * 2) * (radius/2))) + 7; 

    // Drawing the hour hand 

    g.setColor(Color.black); 
    g.fillOval(center - 8, center - 8, 16, 16); 
    g.drawLine(center, center, anim, anim2); 
    g.drawLine(center + 1, center, anim + 1, anim2); 
    g.drawLine(center, center + 1, anim, anim2 + 1); 
    g.drawLine(center - 1, center, anim - 1, anim2); 
    g.drawLine(center, center - 1, anim, anim2 - 1); 
    g.drawLine(center + 1, center + 1, anim, anim2); 
    g.drawLine(center + 1, center - 1, anim, anim2); 
    g.drawLine(center - 1, center + 1, anim, anim2); 
    g.drawLine(center - 1, center - 1, anim, anim2); 


    // Math for minute hand 

    radius = size - 90; 
    // time = System.currentTimeMillis() % 3600000/3600000 * Math.PI; 
    anim = center 
      + (int) ((Math.sin(System.currentTimeMillis() % 3600000.0 
        /3600000 * Math.PI * 2) * radius/2)); 
    anim2 = center 
      - (int) ((Math.cos(System.currentTimeMillis() % 3600000.0 
        /3600000 * Math.PI * 2) * radius/2)); 

    // Drawing the minute hand 
    g.setColor(Color.black); 
    g.drawLine(center, center, anim, anim2); 
    g.drawLine(center + 1, center, anim + 1, anim2); 
    g.drawLine(center, center + 1, anim, anim2 + 1); 
    g.drawLine(center - 1, center, anim - 1, anim2); 
    g.drawLine(center, center - 1, anim, anim2 - 1); 

    //Math for second hand 

    DateFormat dateFormat = new SimpleDateFormat("ss"); 
    Calendar cal = Calendar.getInstance(); 
    String s = dateFormat.format(cal.getTime()); 

    radius = size - 70; 
    // time = System.currentTimeMillis() % 60000/60000 * Math.PI; 
    anim = center 
      + (int) ((Math.sin(Integer.parseInt(s) % 60.0/60 * Math.PI 
        * 2) * (radius/2))); 
    anim2 = center 
      - (int) ((Math.cos(Integer.parseInt(s) % 60.0/60 * Math.PI 
        * 2) * (radius/2))); 

    // Drawing the second hand 

    g.setColor(Color.red); 
    g.drawLine(center, center, anim, anim2); 
    g.drawLine(center + 1, center, anim + 1, anim2); 
    g.drawLine(center, center + 1, anim, anim2 + 1); 
    g.drawLine(center - 1, center, anim - 1, anim2); 
    g.drawLine(center, center - 1, anim, anim2 - 1); 

    // Center circle 

    g.fillOval(center - 5, center - 5, 10, 10); 
    g.setColor(Color.black); 
    g.fillOval(center - 2, center - 2, 4, 4); 

    // g.setColor(new Color(new Random().nextInt(255), new Random().nextInt(255), new Random().nextInt(255))); 
    // g.fillRect(0, 0, getWidth(), getHeight()); 

    // Drawing to screen 

    g = getGraphics(); 
    g.drawImage(screen, 0, 0, size, size, this); 
    g.dispose(); 
} 

}

und

package Clock; 

import java.applet.Applet; 
import java.awt.Color; 
import java.lang.Object; 
import javax.swing.JPanel; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Image; 
import javax.swing.JFrame; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 

public class Numbers extends JPanel { 
    private static final long serialVersionUID=1L; 

    public int size = Component.size; 
    public int center = size/2; 

    public void setFont(Font font) { 
    super.setFont(font); 
    repaint(); 
    } 
    public String getDay() { 
     DateFormat dateFormat=new SimpleDateFormat("dd"); 
     Calendar cal = Calendar.getInstance(); 
     String s = dateFormat.format(cal.getTime()); 
     int day = Integer.parseInt(s); 
     String d = day + ""; 
      // sets ordinal indicator 
      switch(day) { 
        case 1: 
        case 21: 
        case 31: 
        d += "st"; 
        break; 
        case 2: 
        case 22: 
        d += "nd"; 
        break; 
        case 3: 
        case 23: 
        d += "rd"; 
        break; 
        default: 
        d += "th"; 
      } 
      return d; 
    } 
    public String getHour() { 
     DateFormat dateFormat = new SimpleDateFormat("HH"); 
     Calendar cal = Calendar.getInstance(); 
     String s = dateFormat.format(cal.getTime()); 
     int hour = Integer.parseInt(s) -1; 

     String n = hour + ""; 
     if(hour < 10) { 
      n=hour+""; 
     } 
     return n; 
    } 

    public String getMonth() { 
     DateFormat dateFormat = new SimpleDateFormat("MM"); 
     Calendar cal = Calendar.getInstance(); 
     String s = dateFormat.format(cal.getTime()); 
     int month = Integer.parseInt(s); 

     // sets month name to number 
     String m = ""; 
     switch (month) 
     { 
      case 1: 
      m= "January"; 
      break; 
      case 2: 
      m= "February"; 
      break; 
      case 3: 
      m= "March"; 
      break; 
      case 4: 
      m= "April"; 
      break; 
      case 5: 
      m= "May"; 
      break; 
      case 6: 
      m= "June"; 
      break; 
      case 7: 
      m= "July"; 
      break; 
      case 8: 
      m= "August"; 
      break; 
      case 9: 
      m= "September"; 
      break; 
      case 10: 
      m= "October"; 
      break; 
      case 11: 
      m= "November"; 
      break; 
      case 12: 
      m= "December"; 
     } 
     return m; 
    } 

    public void render(Graphics g) { 
     g.setColor(Color.black); 

     DateFormat dateFormat = new SimpleDateFormat(":mm:ss"); 
     Calendar cal = Calendar.getInstance(); 
     String s = dateFormat.format(cal.getTime()); 
     int n = center - ((s.length() *13)/2); 
     //265 
     g.setFont(new Font("Arial", 1, 20)); 
     s = (Integer.parseInt(getHour(), 10) % 12 + 1) + "" + dateFormat.format(cal.getTime()); 
     n = center - (s.length() * 10/2); 
     g.setColor(Color.DARK_GRAY); 
     g.fillRoundRect(250, 348, 100, 30, 6, 6); 
     g.setColor(Color.LIGHT_GRAY); 
     g.fillRoundRect(252, 350, 96, 26, 6, 6); 
     g.setColor(Color.BLACK); 
     g.drawString("TIME", 275, 345); 
     g.drawString("DATE", 275, 225); 
     g.drawString("AM", 255, 150); 
     g.drawString("PM", 315, 150); 
     g.drawString(s, n, 370); 
     int p = Integer.parseInt(getHour(), 10); 
     if(p < 11 || p == 24) { 
      g.fillOval(265, 160, 10, 10); 
      g.drawOval(325, 160, 10, 10); 
     } else { 
      g.drawOval(265, 160, 10, 10); 
      g.fillOval(325, 160, 10, 10); 
     } 

     dateFormat = new SimpleDateFormat("yyyy"); 
     cal = Calendar.getInstance(); 
     s = getMonth() + " " + getDay() + ", " + dateFormat.format(cal.getTime()); 
     n = center - (int) ((s.length() * 10.25)/2); 

     g.setColor(Color.DARK_GRAY); 
     g.fillRoundRect(200, 228, 200, 30, 6, 6); 
     g.setColor(Color.LIGHT_GRAY); 
     g.fillRoundRect(202, 230, 196, 26, 6, 6); 
     g.setColor(Color.BLACK); 
     g.drawString(s, n, 250); 
     s = Component.name; 
     n=center - (int)((s.length()*10)/2); 
     g.drawString(s, n , 450); 

     g.setFont(new Font("Arial", 1, 30)); 
     int radius = size - 100; 
     for(int i = 0; i < 12; i++) { 
      double anim = (int) ((Math.sin((i+1) % 12.0/12 * Math.PI * 2) * (radius/2))); 
      double anim2 = (int) ((Math.cos((i+1) % 12.0/12 * Math.PI * 2) * (radius/2))); 
      if(i >= 9){ 
       anim -= 10; 
      } 
      g.drawString((i+1) + "", center + (int) anim - 6, center - (int) anim2 + 12); 
     } 
    } 
} 
+0

Können Sie den notwendigen Teil hinzufügen von der Code hier? – manetsus

+0

Alle relevanten Code sollte hier mit Ihrer Frage und nicht in einem Link sein. Bitte lesen Sie die Seitenregeln, vorzugsweise bevor Sie Ihre Fragen veröffentlichen. Sie können sie hier finden: [Hilfe] –

+0

@HovercraftFullOfEels Code zur Frage hinzugefügt, sorry – larvy

Antwort

1

gibt es jede Menge Fragen - wo man sogar anfangen?

  • Sie haben eine Klasse mit dem Namen Component, ein Name, der leicht in Konflikt mit einem Schlüssel Java-Core-GUI-Klasse verursachen, java.awt.Component. Benenne es in etwas anderes um.
  • Diese Klasse erweitert Applet, wird aber nicht als Applet verwendet. Stattdessen wird es als Komponente verwendet, die zu einem JFrame hinzugefügt werden soll - das macht keinen Sinn, wenn man versucht, ein Fenster der obersten Ebene in ein anderes zu fügen, und es würde eine gewisse Begründung erfordern, warum man es in einer so seltsamen Form macht . Warum erweitern Sie JPanel oder JComponent nicht noch etwas, das mehr Sinn macht?
  • Sie verwenden ein Grafikfeld und Zeichnen, etwas, das NullPointerException riskiert. Stattdessen Google und lesen Sie die Swing-Zeichnungs-Tutorials und folgen Sie deren Lead-Draw passiv innerhalb der PaintComponent-Methode eines JPanel. Es gibt noch weitere wichtige Details, die Sie in den Tutorials sehen und erklären können.
  • Sie zeichnen mit einem Graphics-Objekt, das Sie erhalten, indem Sie getGraphics() für eine Komponente aufrufen, was zu instabilen Zeichnungen und möglichen NullPointerExceptions führen wird. Lesen Sie erneut die Anleitungen, wie Sie das richtig machen.
  • Sie machen Swing-Aufrufe in einem Hintergrundthread, was dazu führen kann, dass Threading-Fehler intermittierend schwer zu debuggen sind. Verwende einen Swing-Timer, um dir die Dinge zu erleichtern. Google das Tutorial für die blutigen Details.
  • Sie scheinen ein JPanel, Numbers zu erstellen, fügen es aber nicht der GUI hinzu (was ich sagen kann), sondern versuchen es auf eine seltsame Weise darzustellen - warum, ich habe keine Ahnung. Tu das nicht. Machen Sie wieder Grafiken gemäß den Swing-Zeichnungs-Tutorials. Hier ist der Link:
  • ..... mehr
+0

Schätzen Sie die Hilfe und ich verstehe, es ist nicht das ideale Programm, aber ich bin nur auf der Suche nach, wie ich es zu einem ersten Mal einstellen kann, anstatt die Systemzeit, wenn das möglich ist? – larvy

+0

* "Wo soll ich anfangen?" * - Ein Tutorial;) – MadProgrammer

+0

@larvy: Woher hast du den Code dafür? Das wäre ein Anfang, um deine ursprüngliche Frage zu lösen. –