Animation 使用paintComponent制作简单动画

Animation 使用paintComponent制作简单动画,animation,paintcomponent,repaint,Animation,Paintcomponent,Repaint,我试着在面板顶部做一个小的正方形移动。我不担心动画或闪烁之类的东西的无缝性。在while循环中,repaint()似乎没有重复调用paintComponent。想法 公共类NodeMove扩展了JFrame{ boolean running = true; public NodeMove() { widgetNode panel = new widgetNode(); add(panel); setLocationRelativeTo(null); setDe

我试着在面板顶部做一个小的正方形移动。我不担心动画或闪烁之类的东西的无缝性。在while循环中,repaint()似乎没有重复调用paintComponent。想法

公共类NodeMove扩展了JFrame{

boolean running = true;

public NodeMove() {

    widgetNode panel = new widgetNode();
    add(panel);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(400, 400);
    setVisible(true);

    Runnable node = new widgetNode();
    Thread thread1 = new Thread(node);
    thread1.start();
}

class widgetNode extends JPanel implements Runnable {

    private static final long serialVersionUID = 1L;    
    private int x = 30;
    private int y = 30;     
    public widgetNode() {
    }

    public void run(){

        while(running){
            nodeUpdate();
            repaint();

            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {}
        }
    }

    public void nodeUpdate(){
        x += 4;
    }

    protected void paintComponent(Graphics g) {
        super.paintComponents(g);
        g.drawRect(x, y, 30, 30);
    }
}

public static void main(String[] args) {

    NodeMove frame = new NodeMove();
    for(int i = 0; i < 50; i++){
        frame.repaint();
    }
}
boolean running=true;
公共节点移动(){
widgetNode面板=新建widgetNode();
添加(面板);
setLocationRelativeTo(空);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
设置大小(400400);
setVisible(真);
Runnable node=新的widgetNode();
Thread thread1=新线程(节点);
thread1.start();
}
类widgetNode扩展JPanel实现可运行{
私有静态最终长serialVersionUID=1L;
私人整数x=30;
私人智力y=30;
公共widgetNode(){
}
公开募捐{
(跑步时){
nodeUpdate();
重新油漆();
试一试{
睡眠(500);
}捕获(中断异常e){}
}
}
公共无效节点更新(){
x+=4;
}
受保护组件(图形g){
超级组件(g);
g、 drawRect(x,y,30,30);
}
}
公共静态void main(字符串[]args){
NodeMove frame=新的NodeMove();
对于(int i=0;i<50;i++){
frame.repaint();
}
}
}