为什么不是我的Java动画的工作? [英] Why isn't my java animation working?

查看:124
本文介绍了为什么不是我的Java动画的工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

一切仍是当我想要的雨滴在屏幕上,直到他们见底向下移动,然后再做一遍。我用实现Runnable并有重绘其run方法。任何人都知道我缺少的是什么?

 进口的javax.swing *。
进口java.awt中的*。
进口的java.util。*;公共类屏保继​​承JPanel实现Runnable {
    私人最终静态INT FRAME_HEIGHT = 600;
    私人最终静态INT FRAME_WIDTH = 600;
    INT阴雨= 100;
    INT rainGo = 1;
    公共静态无效的主要(字串[] args){
        JFrame的帧=新的JFrame();
        frame.setSize(FRAME_WIDTH,FRAME_HEIGHT);
        frame.add(新屏保());
        frame.setVisible(真);    }
    公共屏幕(){
        彩色背景;
        背景=新的色彩(212202115);
        的setBackground(背景);
    }
     保护无效paintComponent(图形G){
            super.paintComponent方法(G);
            彩色树;
            颜色的叶子;
            彩色的云;
            颜色雨;
            雨=新的色彩(0128255);
            云计算=新的色彩(160160160);
            叶=新的色彩(0,204,0);
            树=新的色彩(102,0,0);            g.setColor(树);
            //g.drawLine(400,​​375,360,340);
            g.fillRect(400,250,80,320);
            g.setColor(叶子)
            g.fillOval(340150,200,160);
            g.setColor(云);
            g.fillOval(10,5,550,100);            随机随机=新的随机();
            INT rainX1 = random.nextInt(500)+ 40;
            INT rainW1 = random.nextInt(30)+ 10;
            INT rainX2 = random.nextInt(500)+ 40;
            INT rainW2 = random.nextInt(30)+ 10;
            INT rainX3 = random.nextInt(500)+ 40;
            INT rainW3 = random.nextInt(30)+ 10;
            INT rainX4 = random.nextInt(500)+ 40;
            INT rainW4 = random.nextInt(30)+ 10;            g.setColor(雨);
            g.fillOval(rainX1,阴雨+​​ rainGo,rainW1,rainW1);
            g.fillOval(rainX2,阴雨+ rainGo,rainW2,rainW2);
            g.fillOval(rainX3,阴雨+ rainGo,rainW3,rainW3);
            g.fillOval(rainX4,阴雨+ rainGo,rainW4,rainW4);
        }
     公共无效的run(){
         而(真){
             changeRain();
             重绘();
         }
     }
     公共无效changeRain(){
         如果(雨​​季+ rainGo< FRAME_HEIGHT){
             rainGo ++;
         }
         其他{
             rainGo = 1;
         }
     }
}


解决方案

简短的回答:你没有启动来开始你的动画

完整的答案:使用的秋千并发机制之一,如秋千定时器动画。秋千计时器被设计成与Swing组件正确交互。

Everything is still when I want the raindrops to move down the screen until they hit the bottom and then do it again. I used implements runnable and have a run method that repaints it. Anyone know what I am missing?

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

public class Screensaver extends JPanel implements Runnable{
    private final static int FRAME_HEIGHT = 600;
    private final static int FRAME_WIDTH = 600;
    int rainY = 100;
    int rainGo = 1;
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setSize(FRAME_WIDTH,FRAME_HEIGHT);
        frame.add(new Screensaver());
        frame.setVisible(true);

    }
    public Screensaver(){
        Color background;
        background = new Color(212,202,115);
        setBackground(background);
    }
     protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            Color tree;
            Color leaves;
            Color cloud;
            Color rain;
            rain = new Color(0,128,255);
            cloud = new Color(160,160,160);
            leaves = new Color(0,204,0);
            tree = new Color(102,0,0);

            g.setColor(tree);
            //g.drawLine(400, 375, 360, 340);
            g.fillRect(400, 250,80, 320 );
            g.setColor(leaves);
            g.fillOval(340,150 , 200, 160);
            g.setColor(cloud);
            g.fillOval(10,5,550,100);

            Random random = new Random();
            int rainX1 = random.nextInt(500) + 40;
            int rainW1 = random.nextInt(30) + 10;
            int rainX2 = random.nextInt(500) + 40;
            int rainW2 = random.nextInt(30) + 10;
            int rainX3 = random.nextInt(500) + 40;
            int rainW3 = random.nextInt(30) + 10;
            int rainX4 = random.nextInt(500) + 40;
            int rainW4 = random.nextInt(30) + 10;

            g.setColor(rain);
            g.fillOval(rainX1, rainY + rainGo, rainW1, rainW1);
            g.fillOval(rainX2, rainY+ rainGo, rainW2, rainW2);
            g.fillOval(rainX3, rainY+ rainGo, rainW3, rainW3);
            g.fillOval(rainX4, rainY+ rainGo, rainW4, rainW4);


        }
     public void run(){
         while(true){
             changeRain();
             repaint();
         }
     }
     public void changeRain(){
         if(rainY+rainGo< FRAME_HEIGHT){
             rainGo++;
         }
         else{
             rainGo = 1;
         }
     }
}

解决方案

Short answer: You didn't start a Thread to start your animation.

Full answer: Use one of Swings concurrency mechanisms such as a Swing Timer for animation. Swing Timers are designed to interact correctly with Swing components.

这篇关于为什么不是我的Java动画的工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆