java - 如何实时调整Java动画?

标签 java swing animation jframe jpanel

我创建了一个简单的动画,其中一个正方形从一个角弹到另一个角。但是,它仅在固定范围内执行此操作。如果我调整帧大小,它仍然只在范围内反弹。如何实时更改边界,以便在窗口拉伸(stretch)时形状仍会在整个窗口上呈现动画?

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

public class Animation extends JPanel implements ActionListener{

Timer timer = new Timer(5, this);
int x=0, xspeed=2,y=0,yspeed=2,framex=575,framey=575;

public void paintComponent(Graphics g){
    super.paintComponent(g);
    g.setColor(Color.BLUE);
    g.fillRect(x, y, 50, 50);
    timer.start();
}

public void actionPerformed(ActionEvent e) {

    if(x<0||x>framex){xspeed=-xspeed;}
    if(y<0||y>framey){yspeed=-yspeed;}

    x=x+xspeed;
    y=y+yspeed;
    repaint();
}

public static void main(String[] args){
    Animation a = new Animation();
    JFrame frame = new JFrame("Animate");
    frame.setSize(600, 600);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(a);
}
}

最佳答案

if(x<0||x>framex){xspeed=-xspeed;}
if(y<0||y>framey){yspeed=-yspeed;}

您可以使用 getSize() 方法获取面板的当前大小。

Dimension d = getSize();

if(x < 0 || x > d.width){xspeed =- xspeed;}

if(y < 0 || y > d.height){yspeed =- yspeed;}

不要害怕使用空格来使代码更具可读性。

关于java - 如何实时调整Java动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33557663/

相关文章:

java maven - 覆盖另一个依赖项的版本

android - 如何重复 Android 动画

javascript - 使用 setInterval 显示/隐藏图像(我应该在哪里放置代码?)

java - 如何通过Utgard批量访问OPC DA服务器数据(一次100个信号)?

java - 每次创建对象并将其添加到数组时都会增加 "count"

Java重复捕手for循环仍然返回欺骗

java - 为什么 JComboBox 和 ComboBoxModel 类没有 List 或 Collection 构造函数?

java - 难以在多个 JPanel 中对齐组件

java - JComboBox 中项目上的鼠标事件

javascript - CSS3改变动画持续时间(速度)动画中期