Я хочу обновить свой фрейм Java!(Создание программы часов) - PullRequest
0 голосов
/ 09 июня 2018

Я хочу обновить мою программу Frame, используя язык Java.

Посмотрите на это изображение:

enter image description here

Я хочу обновитьзначение часов и минут выглядит следующим образом:

enter image description here

, но я не знаю, как использовать функцию update() и repaint() функцию.

вот мой исходный код:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class MyGraphic extends JComponent {
    public int h = 2;
    public int m = 42;
    public String time = "Time -> " + Integer.toString(h) + " : " + Integer.toString(m);

    public void update(Graphics g) {    //this method is called by repaint() Method.
        m = m + 1;
        if(m == 60) {
            h += 1;
            m = 0;
        }
    } //how can I call this method? I want to update my int type variables!

    public void paintComponent(Graphics g) {
        //only for "write time"
        //I erased source of Drawing clock image. it is long.

        Font strFont = new Font("TimesRoman", Font.BOLD, 19);
        g.setFont(strFont);
        g.drawString(time, 20, 300);
        this.repaint();    
        //I thought this.repaint() Method will call update() Method, 
        //but It didn't work...
    }
}
//main thread
public class mainsrc {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int out = 0;
        JFrame frame = new JFrame();    
        MyGraphic mg = new MyGraphic();
        //creating object of JFrame and MyGraphic.

        final int FRAME_WIDTH = 300;
        final int FRAME_HEIGHT = 400;
        //declaring WIDTH and HEIGHT.

        frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
        frame.setTitle("2014305034 This is Clock");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //ETC doing Settings

        while(true) {
            frame.add(mg);
            frame.setVisible(true); 
        }       
    }

}

Спасибо за любую помощь.

Ответы [ 3 ]

0 голосов
/ 09 июня 2018

Вот рабочий пример обновления атрибутов и рисования «времени».Для получения дополнительной информации см. Комментарии в коде.

В коде по-прежнему множество ошибок.БНИ.

import javax.swing.*;
import java.awt.*;

class MyGraphic extends JComponent {

    public int h = 2;
    public int m = 42;
    // better done as a method? 
    //public String time = "Time -> " + Integer.toString(h) + " : " + Integer.toString(m);

    // DO NOT MESS WITH THIS METHOD! 
    /*
    public void update(Graphics g) {    //this method is called by repaint() Method.
        m = m + 1;
        if (m == 60) {
            h += 1;
            m = 0;
        }
    } //how can I call this method? I want to update my int type variables!
    */

    private void updateAttributes() {
        m = m + 1;
        if (m == 60) {
            h += 1;
            m = 0;
        }
    }

    private String getTime() {
        return "Time -> " + Integer.toString(h) + " : " + Integer.toString(m);

    }

    public void paintComponent(Graphics g) {
        //only for "write time"
        //I erased source of Drawing clock image. it is long.

        Font strFont = new Font("TimesRoman", Font.BOLD, 19);
        g.setFont(strFont);
        g.drawString(getTime(), 20, 300);
        updateAttributes(); // THIS is how you can call method to update them
        this.repaint();
        //I thought this.repaint() Method will call update() Method, 
        //but It didn't work...
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        MyGraphic mg = new MyGraphic();
        //creating object of JFrame and MyGraphic.

        final int FRAME_WIDTH = 300;
        final int FRAME_HEIGHT = 400;
        //declaring WIDTH and HEIGHT.

        frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
        frame.setTitle("2014305034 This is Clock");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //ETC doing Settings

        // while (true) { // WHAT THE..?
            frame.add(mg);
            frame.setVisible(true);
        //}
    }
}
0 голосов
/ 09 июня 2018

Ух ты ... Я использовал Thread и Success моего проекта!

вот моя тема:

class MyThread extends Thread {
    public void run(MyGraphic mg) {
        while(true) {
            try {
                mg.m = mg.m + 1;
                System.out.println(mg.m);
                sleep(1000);
            } catch(InterruptedException e) {
                System.out.println("Error is occured: " + e.getMessage());
            } 

        }
    }
}

и в главном источнике:

frame.add(mg);
frame.setVisible(true);         
t1.run(mg);

хахахаспасибо, чтобы дать мне представление об использовании таймера потока!

0 голосов
/ 09 июня 2018

Вы можете использовать классы планировщика задач, такие как Timer и TimerTask, чтобы вызывать функцию обновления через определенный промежуток времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...