中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java 畫時鐘遇到的問題及解決方法

發布時間:2021-11-05 13:39:49 來源:億速云 閱讀:151 作者:柒染 欄目:開發技術

這期內容當中小編將會給大家帶來有關Java 畫時鐘遇到的問題及解決方法,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

1.不能一直得到當前的時間,導致刷新時間不變。

剛開始我自以為把int s = calendar.get(Calendar.SECOND)放到一個線程線程里再刷新就可以看到秒的變化了,

可惜結果并不是我想到那樣,畫面并沒有任何變化。

然后我一頓亂操作,最后還是得去問老師。/(ㄒoㄒ)/~~ /(ㄒoㄒ)/~~

讓我知道了還有時間監聽器這個東西,看來我知道還是太少啦 (;′⌒`)

加入下列代碼就行啦

Java 畫時鐘遇到的問題及解決方法

2.piant方法里

g.drawString("s",x,y)刷新的時候后一個數字覆蓋前一個數字,假如秒從0開始,下一秒的1會直接畫在0上,原來的0不會消失,drawLine()也是如此。如下圖

Java 畫時鐘遇到的問題及解決方法

為什么會有這個問題呢?

因為你之前畫上去的沒有擦掉,所以全混在一起

然后咋解決呢?

想到用g.clearRect()去解決,發現位置有點難調。/(ㄒoㄒ)/~~

調了半天然后發現直接覆蓋了連內容都不顯示了 /(ㄒoㄒ)/~~ 不知道是不是我的用法有錯 ≧ ﹏ ≦

到這里我只能去找度娘求助。

找到了一個好辦法 上圖:

Java 畫時鐘遇到的問題及解決方法

也就是圖上兩行代碼。

調用super.paintComponent(g) 問題就被解決了

super.paintComponent(g) 會調用組件的原始界面重新繪制,這樣就相當于把上次的擦除啦。

最后把我源碼附上。請各位指點!

 import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.http.WebSocket;
import java.net.http.WebSocket.Listener;
import java.util.Calendar;
import java.util.Date;
 
public class ClockFrame extends JFrame {
    ClockFrame() {
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 400);
        setLocationRelativeTo(null);
    }
 
    public static void main(String[] args) {
        ClockFrame frame = new ClockFrame();
        ClockPanel panel = new ClockPanel();
        frame.add(panel);
        panel.setCalendar();
        frame.setVisible(true);
    }
}
 
 
class ClockPanel extends JPanel {
    //        畫h:m:s;
    Calendar calendar = Calendar.getInstance();
    int s = calendar.get(Calendar.SECOND);
    int m = calendar.get(Calendar.MINUTE);
    int h = calendar.get(Calendar.HOUR);
 
    public void setCalendar() {
        Timer timer = new Timer(1000, new Listener());
        timer.start();
    }
    class Listener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            s++;
            if (s == 60) {
                m++;
                s = 0;
            }
            if (m == 60) {
                h++;
                m = 0;
            }
            repaint();
        }
    }
 
    //run 動態
    int sx = 190;
    int sy = 70;
 
    ClockPanel() {
        setBackground(Color.GRAY);
    }
 
    public void paint(Graphics g) {
        super.paintComponent(g);
//        圓
        g.drawOval(83, 57, 220, 220);
 
        //畫點
        g.fillOval(190, 170, 5, 5);//Center
        for (int i = 12; i > 0; i--) {
            g.fillOval((int) (190 + 100 * Math.sin(Math.PI / 6 * i)), (int) (170 + 100 * Math.cos(Math.PI / 6 * i)), 5, 5);
            String time = i + "";
            g.setFont(new Font("微軟雅黑", Font.BOLD, 15));
            g.drawString(time, (int) (190 + Math.sin(Math.PI / 6 * i) * 100), (int) (170 - Math.cos(Math.PI / 6 * i) * 100));
        }
        g.setFont(new Font("微軟雅黑", Font.BOLD, 20));
        String S = s > 10 ? s + "" : "0" + s;
        String M = m > 10 ? m + "" : "0" + m;
        String H = h > 10 ? h + "" : "0" + h;
        g.drawString("現在是中國時間" + H + ":" + M + ":" + S, 80, 40);
 
        final BasicStroke stokeLine = new BasicStroke(3.0f);
        Graphics2D g2d = (Graphics2D) g;
        g2d.setStroke(stokeLine);
        g.setColor(Color.black);
        g.drawLine(190, 170, (int) (190 + (Math.cos((s * Math.PI / 30) - Math.PI / 2) * 100)), (int) (170 + (Math.sin((s * Math.PI / 30 - Math.PI / 2)) * 100)));
        g.setColor(Color.blue);
        g.drawLine(190, 170, (int) (190 + (Math.cos((m * Math.PI / 30 - Math.PI / 2)) * 100)), (int) (170 + (Math.sin((m * Math.PI / 30 - Math.PI / 2)) * 100)));
        g.setColor(Color.GREEN);
        g.drawLine(190, 170, (int) (190 + (Math.cos((h * Math.PI / 12)) * 100)), (int) (170 + ((Math.sin(h * Math.PI / 12)) * 100)));
    }
}

上述就是小編為大家分享的Java 畫時鐘遇到的問題及解決方法了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

肇源县| 汉中市| 武功县| 云梦县| 丹棱县| 和平县| 新昌县| 勃利县| 高台县| 阜南县| 长春市| 东方市| 吉首市| 沁水县| 田东县| 洛扎县| 兰西县| 临清市| 嘉鱼县| 马关县| 湟中县| 肥西县| 苍山县| 株洲市| 名山县| 湖南省| 石狮市| 诸暨市| 容城县| 南投市| 萨嘎县| 千阳县| 天峨县| 铜鼓县| 于田县| 郴州市| 永定县| 乃东县| 如皋市| 峨眉山市| 湘阴县|