如何在java中制作一个允许改变颜色的计时器?

时间:2016-03-11 13:37:46

标签: java timer

我正在为Java制作交通灯系统。 现在,我可以推动三个底部来改变灯光的颜色,这非常有效。

如何制作一个20秒的定时器,它以绿灯开始。 5秒后,它变为橙色2秒,最后13秒变为红色。定时器完成后,需要从头开始重启。

希望有人可以帮助我

问候,

塞缪尔



package javacursus;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;


public class SEE extends Applet
{   
    
  // Begin variabelen
  boolean rood;
  boolean oranje;
  boolean groen;
  private Button roodKnop = new Button();
  private Button oranjeKnop = new Button();
  private Button groenKnop = new Button();
  // Einde variabelen
  
    public void paint(Graphics g){
        // De achtergrond\





        // Het stoplicht
        Color bruin = new Color(110,75,40);
        g.setColor(bruin);
        g.fillRect(140, 20, 60, 150);
        g.fillRect(160, 150, 20, 80);
        g.setColor(Color.black);
        g.fillOval(150,25,40,40);
        g.fillOval(150,75,40,40);
        g.fillOval(150,125,40,40);
        if (rood)
        {
            g.setColor(Color.red);
            g.fillOval(150, 25, 40, 40);
        }
        if (oranje)
        {
            g.setColor(Color.orange);
            g.fillOval(150, 75, 40, 40);
        }
        if (groen)
        {
            g.setColor(Color.green);
            g.fillOval(150, 125, 40, 40);
        }
        
    }
    
    
   public void init()
   {
     setLayout(null);
     setSize(400,400);
     roodKnop.setBounds(20, 300, 75, 25);
     roodKnop.setBackground(Color.red);
     roodKnop.setLabel("rood");
     add(roodKnop);
     roodKnop.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        roodKnop_ActionPerformed(evt);
      }
    });
    
     oranjeKnop.setBounds(120, 300, 75, 25);
     oranjeKnop.setBackground(Color.orange);
     oranjeKnop.setLabel("oranje");
     add(oranjeKnop);
     oranjeKnop.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent evt) {
         oranjeKnop_ActionPerformed(evt);
       }
     });

     groenKnop.setBounds(220, 300, 75, 25);
     groenKnop.setLabel("groen");
     groenKnop.setBackground(Color.green);
     groenKnop.addActionListener(new ActionListener(){
       public void actionPerformed(ActionEvent evt) {
         groenKnop_ActionPerformed(evt);
       }
     });
    add(groenKnop);
    }

  public void roodKnop_ActionPerformed(ActionEvent evt) {
    rood=true;
    groen=false;
    oranje=false;
    repaint();
  }

  public void oranjeKnop_ActionPerformed(ActionEvent evt) {
    rood=false;
    groen=false;
    oranje=true;
    repaint();
  }

  public void groenKnop_ActionPerformed(ActionEvent evt) {
    rood=false;
    groen=true;
    oranje=false;
    repaint();
  }

}




2 个答案:

答案 0 :(得分:0)

您可以尝试使用计时器(https://docs.oracle.com/javase/8/docs/api/java/util/Timer.html)每20秒安排一次任务。

答案 1 :(得分:0)

看看developer.mozilla.org/en-US/docs/Web/API/Node/removeChild。它们在指定的延迟后触发事件监听器,因此您不需要过多地更改代码。

例如,使用橙色按钮动作侦听器并使其成为变量而不是方法。这允许按钮和计时器使用它。

<form action="foo.action" method="post" name="form1">
  <table id="myTable" border="0" cellpadding="0" cellspacing="0">
    <thead>
      <tr>
        <th align="left" width="1%" nowrap="nowrap">Column header</th>
        <th align="left">Data</th>
      </tr>
    </thead>
    <tbody id="data">
      <tr class="pyjamas">
        <td align="right" nowrap="nowrap">
          <input type="checkbox" name="dd_19675" id="dd_19675" />
          <input type="hidden" name="d_19675" id="d_19675" />
        </td>
        <td nowrap="nowrap">
          <label for="dd_19675" style="width:100%;display:block">First</label>
        </td>
      </tr>
      <tr class="">
        <td align="right" nowrap="nowrap">
          <input type="checkbox" name="dd_19676" id="dd_19676" checked="checked" />
          <input type="hidden" name="d_19676" id="d_19676" checked="checked" />
        </td>
        <td nowrap="nowrap">
          <label for="dd_19676" style="width:100%;display:block">Second</label>
        </td>
      </tr>
    </tbody>
  </table>
  <input type="button" value="Sort" onclick="testSort()" />
</form>

在init中,您的橙色按钮接收动作侦听器:

private final ActionListener orangeListener = e -> {
    rood=false;
    groen=false;
    oranje=true;
    repaint();
}

无论您何时决定触发计时器事件,同样适用:

oranjeKnop.addActionListener(orangeListener);

将导致橙色听众在2秒后开火。我想你会从其他动作监听器中做到这一点,所以例如你的橙色监听器就变成了

new TimerTask(2000, orangeListener)

当灯变为橙色时,它会在2秒后自动变为红色。