Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用java制作一个计时器,让';让我们换颜色吧?_Java_Timer - Fatal编程技术网

如何用java制作一个计时器,让';让我们换颜色吧?

如何用java制作一个计时器,让';让我们换颜色吧?,java,timer,Java,Timer,我正在用Java为交通灯制作一个系统。 现在,我可以推动三个按钮来改变灯光的颜色,这非常有效 我如何制作一个20秒计时器,它以绿灯开始。5秒后变为橙色持续2秒,最后13秒变为红色。计时器完成后,需要从头开始重新启动 希望有人能帮助我 您好 塞缪尔 包javacursus; 导入java.awt.Graphics; 导入java.awt.Color; 导入java.awt.*; 导入java.awt.event.*; 导入java.applet.*; 导入javax.swing.*; 公共类请参

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

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

希望有人能帮助我

您好

塞缪尔

包javacursus;
导入java.awt.Graphics;
导入java.awt.Color;
导入java.awt.*;
导入java.awt.event.*;
导入java.applet.*;
导入javax.swing.*;
公共类请参见扩展小程序
{   
//开始变奏曲
布尔rood;
布尔奥兰杰;
布尔格罗恩;
私有按钮roodKnop=新按钮();
私有按钮oranjeKnop=新按钮();
私有按钮groenKnop=新按钮();
//埃因德·瓦里贝伦
公共空间涂料(图g){
//德阿奇特格罗德\
//赫特斯托普利希特酒店
颜色bruin=新颜色(110,75,40);
g、 毛色(bruin);
g、 fillRect(140,20,60,150);
g、 fillRect(160、150、20、80);
g、 设置颜色(颜色为黑色);
g、 圆形(150,25,40,40);
g、 圆形(150,75,40,40);
g、 圆形(150125,40,40);
如果(rood)
{
g、 setColor(Color.red);
g、 椭圆形(150,25,40,40);
}
如果(奥兰杰)
{
g、 setColor(颜色为橙色);
g、 椭圆形(150,75,40,40);
}
如果(呻吟)
{
g、 setColor(Color.green);
g、 椭圆形(150、125、40、40);
}
}
公共void init()
{
setLayout(空);
设置大小(400400);
菜鸟后退(20300,75,25);
菜鸟退避地(颜色:红色);
roodKnop.setLabel(“rood”);
添加(roodKnop);
roodKnop.addActionListener(新的ActionListener(){
已执行的公共无效操作(操作事件evt){
已执行的roodKnop_行动(evt);
}
});
oranjeKnop.挫折(120300,75,25);
奥兰吉克诺普挫折地(颜色:橙色);
oranjeKnop.setLabel(“oranje”);
添加(oranjeKnop);
oranjeKnop.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件evt){
执行的oranjeKnop_行动(evt);
}
});
格罗恩克努普退步(220,300,75,25);
groenKnop.setLabel(“groen”);
格罗恩诺普退避地(颜色:绿色);
groenKnop.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件evt){
执行的groenKnop_行动(evt);
}
});
添加(groenKnop);
}
公共无效roodKnop_ActionPerformed(ActionEvent evt){
rood=true;
格罗恩=假;
oranje=假;
重新油漆();
}
公共无效或已执行的行动(行动事件evt){
rood=false;
格罗恩=假;
奥兰杰=真;
重新油漆();
}
公共无效groenKnop_ActionPerformed(ActionEvent evt){
rood=false;
格罗恩=真;
oranje=假;
重新油漆();
}

}
您可以尝试使用计时器()每20秒安排一次任务。

看一看。它们在指定的延迟后触发事件侦听器,因此您不需要对代码进行太多修改

例如,将橙色按钮操作侦听器设置为变量而不是方法。这允许按钮和计时器使用它

private final ActionListener orangeListener = e -> {
    rood=false;
    groen=false;
    oranje=true;
    repaint();
}
在init中,橙色按钮接收操作侦听器:

oranjeKnop.addActionListener(orangeListener);
无论您决定从何处触发计时器事件,都适用相同的情况:

new TimerTask(2000, orangeListener)
将导致橙色侦听器在2秒后启动。我猜您将在其他动作侦听器中执行此操作,例如,您的橙色侦听器将成为

private final ActionListener orangeListener = e -> {
    rood=false;
    groen=false;
    oranje=true;
    new TimerTask(2000, redListener).start();
    repaint();
}

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

您正在混合Swing和AWT。考虑一下JApplet,JButton等等。这并不影响你在这里做什么,只是为了将来的参考。