计时器在JFrame中的图像上移动Graphics2D的对象? (日出程序示例)

时间:2012-10-28 01:30:44

标签: java swing timer graphics2d

我正在尝试使用Timer和JFrame以及JComponent编写一个设计日出动画的程序。 Graphics2D的对象是将在JFrame上移动的太阳。我的问题是我不确定在哪里放置Timer并移动Graphicc2D!这是我到目前为止在JFrame中放置图像然后将太阳放在该图像上所做的工作。请告诉我在哪里可以移动太阳。我应该在哪里定义Timer类?在JFrame或JComponent或主类?

public class Main(){

     public static void main(String[] args){

          myFrame frame = new myFrame();
     }
}

class myFrame extends JFrame
{
    public  myFrame()
    {
        Draw component = new Draw();
        add(component);
    }
}

class Draw extends JComponent
{
    public Draw()
    {
          //Read the image here
          //set the newImage
    }

    public void paintComponent(Graphics g)
    {
            Graphics2D g2 = (Graphics2D) g; 
            g2.drawImage(newImage, 0, 0, null);
            g2.fill(new Ellipse2D.Double(x,y,20,20));
            //For the sunrise I need to change x,y during the Timer class!!
    }

}

1 个答案:

答案 0 :(得分:4)

这应该做:

int x, y;
Timer timer = new Timer(50, new ActionListener(){

    public void actionPerformed(ActionEvent evt){
        // update x and y 

        repaint();
    }
});

不要忘记启动计时器,(在构造函数中最好这样做)。