欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2021年11月05日 10:54:57   作者:煙溪彭于晏  
我是一個剛?cè)腴T的小菜鳥,希望我寫的東西可以幫助和我一樣剛?cè)腴T的兄弟們少走一些彎路,也希望大佬們可以多指點指點我。感謝!解決在畫時鐘遇到的問題讓我花費不少時間...說兩個困擾我比較久的

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

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

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

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

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

加入下列代碼就行啦

2.piant方法里

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

為什么會有這個問題呢?

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

然后咋解決呢?

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

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

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

找到了一個好辦法 上圖:

也就是圖上兩行代碼。

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

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

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

 
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 動態(tài)
    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("現(xiàn)在是中國時間" + 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)));
    }
}
 
 
 

到此這篇關(guān)于Java 畫時鐘遇到的問題及解決方案的文章就介紹到這了,更多相關(guān)Java 畫時鐘內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實現(xiàn)后臺數(shù)據(jù)顯示在前端

    java實現(xiàn)后臺數(shù)據(jù)顯示在前端

    這篇文章主要為大家詳細介紹了java實現(xiàn)后臺數(shù)據(jù)顯示在前端,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Spring Boot整合Thymeleaf詳解

    Spring Boot整合Thymeleaf詳解

    這篇文章主要介紹了Spring Boot整合Thymeleaf詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • JAVA 對象創(chuàng)建與對象克隆

    JAVA 對象創(chuàng)建與對象克隆

    這篇文章主要介紹了JAVA 對象創(chuàng)建與對象克隆,new 創(chuàng)建、反射、克隆、反序列化,克隆它分為深拷貝和淺拷貝,通過調(diào)用對象的 clone方法,進行對象的克隆,下面來看看文章的詳細內(nèi)容吧
    2022-02-02
  • springmvc無法訪問/WEB-INF/views下的jsp的解決方法

    springmvc無法訪問/WEB-INF/views下的jsp的解決方法

    本篇文章主要介紹了springmvc無法訪問/WEB-INF/views下的jsp的解決方法,非常具有實用價值,需要的朋友可以參考下
    2017-10-10
  • Java面試題沖刺第八天--Spring框架2

    Java面試題沖刺第八天--Spring框架2

    這篇文章主要為大家分享了最有價值的三道Spring框架面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Mybatis 逆向工程的三種方法詳解

    Mybatis 逆向工程的三種方法詳解

    這篇文章主要介紹了Mybatis 逆向工程的三種方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java代碼性能測試實戰(zhàn)之ContiPerf安裝使用

    Java代碼性能測試實戰(zhàn)之ContiPerf安裝使用

    這篇文章主要為大家介紹了Java代碼性能測試實戰(zhàn)之ContiPerf安裝使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • 關(guān)于BufferedReader的read()和readLine()的區(qū)別

    關(guān)于BufferedReader的read()和readLine()的區(qū)別

    這篇文章主要介紹了關(guān)于BufferedReader的read()和readLine()的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java?Selenide?簡介與用法

    Java?Selenide?簡介與用法

    Selenium?是目前用的最廣泛的Web?UI?自動化測試框架,本文給大家介紹下Java?Selenide使用,感興趣的朋友一起看看吧
    2022-01-01
  • java開發(fā)環(huán)境的完整搭建過程

    java開發(fā)環(huán)境的完整搭建過程

    這篇文章主要給大家介紹了關(guān)于java開發(fā)環(huán)境的完整搭建過程,文中介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02

最新評論