2016-05-06 14 views
-5

私のプログラミングクラスでは、時計を取り組んでいます。クロックは最初の時間に設定する必要があります。これはわかりません。私が現在作業しているクロックはシステム時間を使用しているだけです。私はcal.setを使用して時間を設定しようとしましたが、最初の時間になりたいと思っている時間に凍結して時間が進まないのです。私はこれを編集して初期の時間を設定することはできますが、時計はまだ動作していますか? パッケージ時計;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(); 
} 

}

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

あなたが必要な部分を追加することができますここのコード? – manetsus

+0

関連するすべてのコードは、あなたの質問ではなく、リンク内にあるはずです。好ましくは質問を投稿する前に、サイトのルールをお読みください。あなたはここにそれらを見つけることができます:[ヘルプ] –

+0

@HovercraftFullOfEelsは、質問にコードを追加しました、ごめんなさい – larvy

答えて

1

ロトの問題の - でも開始するには?

  • クラス名はComponentで、キーとなるJavaコアのGUIクラスjava.awt.Componentと簡単に競合する名前になっています。他の名前に変更します。
  • この同じクラスはアプレットを拡張しますが、アプレットとしては使用されていません。むしろJFrameに追加するコンポーネントとして使用されています。これは意味をなさず、トップレベルのウィンドウを別のウィンドウに追加しようとしています。そのような奇妙な出来事でなぜそれをやっているのかについての正当性が必要です。なぜJPanelやJComponentを他のものに拡張するのが理にかなっていますか?
  • あなたはGraphicsフィールドを使用しており、NullPointerExceptionの危険を伴うものです。 Googleの代わりに、Swingの描画チュートリアルを読んで、JPanelのpaintComponentメソッド内で彼らの鉛筆をパッシブに描きます。チュートリアルがどのように表示され、教えられるかを理解するための重要なその他の詳細があります。
  • コンポーネント上でgetGraphics()を呼び出して取得したGraphicsオブジェクトを使用して描画しています。描画が不安定になり、NullPointerExceptionsが発生する可能性があります。もう一度これを正しく行う方法についてのチュートリアルを読んでください。
  • バックグラウンドスレッドでSwing呼び出しを行っています。スレッドエラーを断続的にデバッグすることが困難な場合があります。スイングタイマーを使用して、自分で簡単に作業を進めることができます。 Googleは、詳細については、チュートリアル。
  • JPanel Numbersを作成しているように見えますが、GUIに追加するのではなく、むしろ奇妙な方法でレンダリングしようとしています。これをしないでください。スイングの描画チュートリアルに従ってグラフィックスをやり直してください。ここにリンクです:
  • 上の高度なチュートリアル.....以上が
+0

私はそれが理想的なプログラムではないと理解していますが、私はちょうど私が最初の時間に、可能であれば、システム時間? – larvy

+0

* "どこから始めるのですか?" * - Aチュートリアル;) – MadProgrammer

+0

@larvy:これでコードはどこにありますか?それはあなたの元の質問を解決するための出発点になります。 –

関連する問題