Louissisi 2015-06-03 14:05 采纳率: 50%
浏览 1639
已采纳

求助动态时钟的应用程序,时钟不动

package Java_10;

import java.awt.Color;
import java.awt.Graphics;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Clockone extends JFrame implements Runnable {
private JPanel JP = new JPanel();
private Color C1 = new Color(123, 154, 45);
private SimpleDateFormat FM = new SimpleDateFormat(
"yyyy EEE MM dd HH:mm:ss");
private Date DT = new Date();
private Calendar C = Calendar.getInstance();
private int s, m, h;
private int XC = 101, YC = 101;
private int xs, ys, xm, ym, xh, yh;
private JLabel JL = new JLabel();

public Clockone(String title) {
    super(title);
    setLayout(null);
    add(JP);
    JP.setBounds(0, 0, 300, 300);
    JP.setLayout(null);
    JP.add(JL);
    JL.setBounds(50, 50, 100, 50);

}

public void paint(Graphics g) {
    g.setColor(Color.BLUE);
    g.drawOval(50, 50, 100, 100);
    g.drawOval(100, 100, 5, 5);
    g.fillOval(XC, YC, 3, 3);
    g.drawString("3", 143, 105);
    g.drawString("6", 98, 150);
    g.drawString("9", 51, 105);
    g.drawString("12", 95, 62);
    g.drawString("北京时间:" + String.valueOf((FM.format(DT))), 20, 200);
    setBackground(C1);
    s = C.get(Calendar.SECOND);
    m = C.get(Calendar.MINUTE);
    h = C.get(Calendar.HOUR_OF_DAY);
    xs = (int) (Math.cos(s * Math.PI / 30 - Math.PI / 2) * 45 + XC);
    ys = (int) (Math.sin(s * Math.PI / 30 - Math.PI / 2) * 45 + YC);
    xm = (int) (Math.cos(m * Math.PI / 30 - Math.PI / 2) * 40 + XC);
    ym = (int) (Math.sin(m * Math.PI / 30 - Math.PI / 2) * 40 + YC);
    xh = (int) (Math.cos((h * 30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30 + XC);
    yh = (int) (Math.sin((h * 30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30 + YC);
    g.drawLine(xs, ys, XC, YC);
    g.drawLine(xm, ym, XC - 1, YC);
    g.drawLine(xm, ym, XC, YC - 1);
    g.drawLine(xh, yh, XC - 1, YC);
    g.drawLine(xh, yh, XC, YC - 1);
}

public void run() {
    while (true) {
        try {
            Thread.currentThread().sleep(100);
        } catch (InterruptedException e) {
        }
        repaint();
    }
}

public static void main(String[] args) {

    Clockone CO = new Clockone("Clock");
    CO.setSize(300, 300);
    CO.setVisible(true);
    Thread thread = new Thread(CO);
    thread.start();
    thread.setPriority(MAXIMIZED_BOTH);
}

}

  • 写回答

1条回答 默认 最新

  • JonsonJiao 2015-06-03 14:19
    关注

    核心问题,你的日期没有更新,其他问题,每次绘制前先清除以前的再绘制比较好,改好的代码如下:

     import java.awt.Color;
    import java.awt.Graphics;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    public class Clockone extends JFrame implements Runnable {
        /**
         * 
         */
        private static final long serialVersionUID = 8754113577355207407L;
        private JPanel JP = new JPanel();
        private Color C1 = new Color(123, 154, 45);
        private SimpleDateFormat FM = new SimpleDateFormat(
                "yyyy EEE MM dd HH:mm:ss");
        private Date DT = new Date();
        private Calendar C = Calendar.getInstance();
        private int s, m, h;
        private int XC = 101, YC = 101;
        private int xs, ys, xm, ym, xh, yh;
        private JLabel JL = new JLabel();
    
        public Clockone(String title) {
            super(title);
            setLayout(null);
            add(JP);
            JP.setBounds(0, 0, 300, 300);
            JP.setLayout(null);
            JP.add(JL);
            JL.setBounds(50, 50, 100, 50);
    
        }
    
        public void paint(Graphics g) {
            g.clearRect(0, 0, this.getWidth(), this.getHeight());
            g.setColor(Color.BLUE);
            g.drawOval(50, 50, 100, 100);
            g.drawOval(100, 100, 5, 5);
            g.fillOval(XC, YC, 3, 3);
            g.drawString("3", 143, 105);
            g.drawString("6", 98, 150);
            g.drawString("9", 51, 105);
            g.drawString("12", 95, 62);
            g.drawString("北京时间:" + String.valueOf((FM.format(DT))), 20, 200);
            setBackground(C1);
            s = C.get(Calendar.SECOND);
            m = C.get(Calendar.MINUTE);
            h = C.get(Calendar.HOUR_OF_DAY);
            xs = (int) (Math.cos(s * Math.PI / 30 - Math.PI / 2) * 45 + XC);
            ys = (int) (Math.sin(s * Math.PI / 30 - Math.PI / 2) * 45 + YC);
            xm = (int) (Math.cos(m * Math.PI / 30 - Math.PI / 2) * 40 + XC);
            ym = (int) (Math.sin(m * Math.PI / 30 - Math.PI / 2) * 40 + YC);
            xh = (int) (Math.cos((h * 30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30 + XC);
            yh = (int) (Math.sin((h * 30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30 + YC);
            g.drawLine(xs, ys, XC, YC);
            g.drawLine(xm, ym, XC - 1, YC);
            g.drawLine(xm, ym, XC, YC - 1);
            g.drawLine(xh, yh, XC - 1, YC);
            g.drawLine(xh, yh, XC, YC - 1);
        }
    
        public void run() {
            while (true) {
                try {
                    Thread.sleep(1000);
                    C = Calendar.getInstance();
                    DT = C.getTime();
                } catch (InterruptedException e) {
                }
                repaint();
            }
        }
    
        public static void main(String[] args) {
    
            Clockone CO = new Clockone("Clock");
            CO.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            CO.setLocationRelativeTo(null);
            CO.setSize(300, 300);
            CO.setVisible(true);
            Thread thread = new Thread(CO);
            thread.start();
            thread.setPriority(MAXIMIZED_BOTH);
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体