动画未显示

时间:2016-03-23 14:40:23

标签: java swing animation

我正在尝试这个非常简单的代码。它运行但不显示动画。我是动画的新手,所以我不知道自己错过了什么。

package sample;

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

public class Sample extends JPanel implements ActionListener {
    Timer tm = new Timer(5, this);
    int x = 0, Velx = 5;

    public void paint(Graphics g) {
        g.setColor(Color.RED);
        g.fillRect(x, 30, 50, 50);
        tm.start();
    }

    public void actionPerformed(ActionEvent e) {
        x = x + Velx;
        repaint();
    }

    public static void main(String[] args) {
        Sample X = new Sample();
        JFrame a = new JFrame();
        a.setTitle("Rectangle RED");
        a.setSize(500,500);
        a.setVisible(true);
    }
}

1 个答案:

答案 0 :(得分:1)

Sample X = new Sample();

X永远不会添加到框架中。请参阅第一个提示(粗体部分),了解如何将X添加到框架中。

其他提示:

  • Sample应该@Override getPreferredSize()方法为画布返回合理的大小。然后,我们可以省略a.setSize(500,500);,而不是 a.add(X); a.pack(); ,以使帧格式正确,以显示渲染。
  • Timer应该在除绘画方法之外的某个地方开始!我去找建设者。
  • 任何JComponent中的自定义绘画都应使用paintComponent(Graphics)方法完成。
  • 在所有自定义绘画中,我们应立即调用super方法,以确保通过绘制容器的BG和边框来删除先前的绘图。
  • 请学习常见的Java命名法(命名约定 - 例如EachWordUpperCaseClassfirstWordLowerCaseMethod()firstWordLowerCaseAttribute,除非它是UPPER_CASE_CONSTANT)并一致地使用它。
  • JFrame a = new JFrame(); a.setTitle("Rectangle RED");可缩短为JFrame a = new JFrame("Rectangle RED");