有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java swing计时器是如何工作的?

您好,我在理解swing计时器时遇到困难。有人能给我看一个简单的闪烁动画吗?我在网上看起来很傲慢,但仍然不完全理解它们是如何工作的。如果有人能给我举个这样的例子,那将非常有帮助:

假设我创建了一个圆:

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

然后,如何使用带有延迟的摆动计时器将颜色从橙色更改为灰色

非常感谢您帮助我理解:)


共 (3) 个答案

  1. # 1 楼答案

    我认为一种绘画方法会管用。像这样:

    public void paint(Graphics g){
    super.paint(g);
    
    g.setColor(Color.green);
    g.filloval(30,40,50,50);
     }
    
  2. # 2 楼答案

    首先,您不会像这样硬编码您的颜色使用:

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

    因为这会阻止所有更改颜色状态的功能。而是使用一个类字段来保存所使用的颜色,并将其称为ovalColor

    private Color ovalColor = SOME_DEFAULT_COLOR; // some starting color
    

    然后使用该颜色进行绘制:

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

    然后我会给我的类一个颜色数组或ArrayList<Color>和一个int索引字段:

    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
    

    然后在Swing计时器的ActionListener中,我会增加索引,我会根据数组或ArrayList的大小对其进行修改,我会得到索引指示的颜色并调用repaint()

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

    还有here's a somewhat similar example
    另外请看Swing Timer Tutorial

  3. # 3 楼答案

    也许这会有帮助:

    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();}}