我正在为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();
}
}

答案 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秒后自动变为红色。