how does a swing timer work?

喜你入骨 提交于 2019-12-01 14:26:11

问题


hello i am having trouble trying to understand swing timers. to help me could someone show me a simple flickering animation? i have looked arround on the internet but still dont fully understand how they work. it would be so helpful if someone could give me an example like this:

say if i created a circle:

g.setColor(colors.ORANGE);
g.fillOval(160, 70, 50, 50);

how could i then use a swing timer to change the color from orange to say Gray using a swing timer with a delay?

thank you so much for helping me understand :)


回答1:


First of all, you wouldn't hard-code your color use like this:

g.setColor(colors.ORANGE);
g.fillOval(160, 70, 50, 50);

Since this prevents all ability to change the color's state. Instead use a class field to hold the Color used, and call it something like ovalColor:

private Color ovalColor = SOME_DEFAULT_COLOR; // some starting color

And then use that color to draw with:

g.setColor(ovalColor);
g.fillOval(160, 70, 50, 50);

I'd then give my class an array of Color or ArrayList<Color> and an int index field:

private static final Color[] COLORS = {Color.black, Color.blue, Color.red, 
       Color.orange, Color.cyan};
private int index = 0;
private Color ovalColor = COLORS[index]; // one way to set starting value

Then in the Swing Timer's ActionListener I'd increment the index, I'd mod it by the size of the array or of the ArrayList, I'd get the Color indicated by the index and call repaint();

index++;
index %= COLORS.length;
ovalColor = COLORS[index];
repaint();

Also here's a somewhat similar example.
Also please look at the Swing Timer Tutorial.




回答2:


maybe this would help:

public class object{
Color color = Color.GREEN;
Timer timer;
public object() {

timer = null;
timer = new Timer(5000, new ActionListener(){
    public void actionPerformed(ActionEvent e) {
        if (color.equals(Color.GREEN)) {
            color = Color.RED;
            timer.setDelay(2000);
        } else {
            color = Color.GREEN;
            timer.setDelay(8000);
        }
        repaint();
    }
});
timer.start();}}



回答3:


I think a paint method would work.like this:

public void paint(Graphics g){
super.paint(g);

g.setColor(Color.green);
g.filloval(30,40,50,50);
 }


来源:https://stackoverflow.com/questions/29730491/how-does-a-swing-timer-work

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!