Как я могу отобразить «GIF» без бесконечного цикла в Java - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть класс, где я загружаю отображение данных о погоде и хочу отображать анимацию загрузки при загрузке дисплея.

Вот исходный код:

   DrawFrame(JSONArray weather, String button) {

    this.weather = weather;

    drawPanel = new JPanel() {

        @Override
        protected void paintComponent(Graphics g) {

            super.paintComponent(g);
            switch (button) {
                case MainFrame.hourly1ButtonValue:
                    hourly1 = (Graphics2D) g;
                    drawHourly1();
                    break;
                case MainFrame.hourly12ButtonValue:
                    hourly12 = (Graphics2D) g;
                    drawHourly12();
                    break;
                case MainFrame.index5ButtonValue:
                    stargazing = (Graphics2D) g;
                    drawStargazing();
                    break;
            }
        }
    };

    KeyListener kl=new KeyAdapter()
    {
        public void keyPressed(KeyEvent evt)
        {
            //If someone click Esc key, this program will exit
            if(evt.getKeyCode()==KeyEvent.VK_ESCAPE)
            {
                System.exit(0);
            }
        }
    };

    JFrame frame = new JFrame("Wetteranzeige");
    //frame.setUndecorated(true);
    frame.add(drawPanel);
    frame.setPreferredSize(new Dimension(dimension.width, dimension.height));
    //frame.addKeyListener(kl);
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);

}

иэто один из методов, который я использую для отображения одной погоды. Дисплей:

private void drawStargazing() {

    Integer[][] coordinates = new Integer[2][5];
    coordinates = coordinates5DaysIndex();

    drawPanel.setBackground(Color.black);

    int i = 0;
    int j = 0;
    int k = 1;
    int x;
    int y;

    while (i <= 4) {
        x = coordinates[0][i];
        y = coordinates[1][i];

        stargazing.drawImage(toolkit.getImage(getClass().getResource("images/stern_t.png/")), x - 20, y - 20, drawPanel);
        i++;

        Stroke stroke = new BasicStroke(5);
        stargazing.setStroke(stroke);
    }

    while (k >= 1 && j <= 3) {

        int xEnde = coordinates[0][k];
        int yEnde = coordinates[1][k];

        int xStart = coordinates[0][k - 1];
        int yStart = coordinates[1][k - 1];

        stargazing.setColor(Color.white);
        stargazing.drawLine(xStart, yStart, xEnde, yEnde);

        j++;
        k++;
    }

}

производит примерно так: 1

, когда я добавляю gifон зацикливается бесконечно, а не один раз, поэтому я подумал, что могу вручную нарисовать рисунок, установив каждый кадр (в моем случае изменив положение значка), но я не могу понять, как правильно перекрасить с помощью таймера в соответствии с моей конструкцией рисованияздесь ...

Мне не удается заставить его работать, как в этом примере: https://docs.oracle.com/javase/tutorial/uiswing/painting/step3.html

Так у кого-нибудь есть решение для меня?Ваша помощь будет принята с благодарностью!

...