Как мне заставить эти метрические часы перекрашивать каждый тик? - PullRequest
0 голосов
/ 30 октября 2019

Первый раз, когда задаю вопрос о переполнении стека. Этот действительно очень озадачил меня. По сути, у меня есть код для часов, который я делаю просто для удовольствия, но после первой раскраски он не обновляется. У меня есть комментарий в коде, где я хотел бы запустить обновление, но независимо от того, что я там поместил, оно не вызывает метод рисования (в противном случае он вывел бы «день будет светлым»). Хотя часы работают (я вырезал часть, которая фактически печатает время, чтобы сэкономить место при загрузке). Как вы думаете? Вы должны быть в состоянии скопировать и запустить этот код, в результате чего в окне будет заполненный круг и целое число. если графика обновится, то целое число теоретически изменится ... но это не так. И да, я пытаюсь сделать это изменяемым размером, но оставайтесь на месте. это может быть частью моей проблемы.

import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.text.DecimalFormat;
import java.time.Clock;

import javax.swing.JFrame;

public class toUpload extends Canvas {

    static Clock tickClock;
    static long dmillis;
    static String lastTick;

    private static final long serialVersionUID = -3836576462912965111L;
    private static Rectangle rect;
    static JFrame mainFrame;
    static DecimalFormat df = new DecimalFormat("00");
    static double numberDistance;
    static double sDistance;
    static double mDistance;
    static double hDistance;
    static int Hour = 0;
    static int Minute = 0;
    static int Second = 0;
    static int testing = 0;

    public static void main(String[] args) {
        toUpload t = new toUpload();
        mainFrame = new JFrame();
        mainFrame.setTitle("Metric Clock");
        mainFrame.setResizable(true);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.setSize(400, 400);
        rect = mainFrame.getBounds();
        mainFrame.add(t);
        mainFrame.setVisible(true);
        mainFrame.pack();
        resize();
        mainFrame.addComponentListener(new ComponentListener() 
        { public void componentResized(ComponentEvent evt) {
            int size = evt.getComponent().getSize().width;
            /*try {
                Thread.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }*/
            mainFrame.setSize(size, size);
            resize();
        }
                @Override public void componentMoved(ComponentEvent e) {}
                @Override public void componentShown(ComponentEvent e) {}
                @Override public void componentHidden(ComponentEvent e) {}
        });
        startTic();
        while(true) {
            tic();
            //repaint, but for some reason I can't get it to repaint
            testing++; //just something to change to show whether or not the graphics are updating.
            try {
                Thread.sleep(5);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }


    private static void resize() {
        rect.height = mainFrame.getBounds().height-39;
        rect.width = mainFrame.getBounds().width-16;
        mainFrame.repaint();
    }

    public void paint(Graphics g) {

        System.out.println("day be light");

        g.clearRect(rect.x, rect.y, rect.width, rect.height);
        g.fillOval(50,50,100,100);
        g.drawString(String.valueOf(testing),50,200);
        //does more stuff with painting
    }

    public static void tic() {

        //does stuff


    }
    public static void startTic() {
        //does stuff
    }


}

1 Ответ

0 голосов
/ 30 октября 2019

понял (работал над этим со вчерашнего дня, и только сейчас вспомнил .... Я создал объект с именем "t", как вы можете видеть в коде. Никогда не намеревался вызывать его напрямую, поэтому ясделал это неописательным именем. Никогда не делайте этого, ребята. Звонок t.repaint(); работает отлично.

...