Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.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_Applet - Fatal编程技术网

Java小程序-不使用';画布';?

Java小程序-不使用';画布';?,java,applet,Java,Applet,简而言之,我想设计一个java小程序,用三个相邻的按钮显示交通灯。一个表示红灯,一个表示琥珀色灯,一个表示绿色灯 我的问题是:我不知道如何将每个按钮与右侧的椭圆形链接。所有椭圆都属于同一图形变量g。如果我改变颜色,这三种颜色都会改变 有一个名为canvas的超类,它可以帮助将每个对象在自己的实体中与我的知识分离,但我知道有一种更简单的方法 我该怎么做 import java.awt.*; import java.awt.event.*; import java.applet.*; import

简而言之,我想设计一个java小程序,用三个相邻的按钮显示交通灯。一个表示红灯,一个表示琥珀色灯,一个表示绿色灯


我的问题是:我不知道如何将每个按钮与右侧的椭圆形链接。所有椭圆都属于同一图形变量g。如果我改变颜色,这三种颜色都会改变

有一个名为canvas的超类,它可以帮助将每个对象在自己的实体中与我的知识分离,但我知道有一种更简单的方法

我该怎么做

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.applet.Applet;

public class Traffic extends Applet
    implements ActionListener
{

    int colourNum; //global variable which is responible for changing the light

    Button bttn1 = new Button ("Stop Traffic");
    Button bttn2 = new Button ("Caution");
    Button bttn3 = new Button ("Proceed");

    public void init ()
    {
        setBackground (Color.lightGray);

        bttn1.addActionListener (this); // stop light
        bttn2.addActionListener (this); // yellow light
        bttn3.addActionListener (this); // green light

        add (bttn1);
        add (bttn2);
        add (bttn3);
    }

    public void paint (Graphics g)  // responsible for graphics "within" the window
    {
        g.setColor (Color.black);

        switch (colourNum)
        {
            case 1:
                g.setColor (Color.red);
                break;
        }
        g.fillOval (30, 40, 20, 20); // red light
        g.fillOval (30, 70, 20, 20); // yello light
        g.fillOval (30, 100, 20, 20); // green light
    }


    public void actionPerformed (ActionEvent evt)
    {
        if (evt.getSource () == bttn1)
            colourNum = 1;
        else if (evt.getSource () == bttn2)
            colourNum = 2;
        else
            colourNum = 3;

        repaint ();
    }
}

您应该避免在顶级容器(如Appet)上覆盖油漆。您还应该调用super.paint来表示对绘制链的敬意。最好创建新的基于
画布的组件来单独处理交通信号的绘制。最好的策略可能是让
TrafficLights
类知道如何绘制自身及其状态(例如,红色、绿色、闪烁的黄色。当需要绘制时。调用
交通灯。从绘制中绘制(图形)
以绘制当前状态。顺便说一句-为什么AWT而不是Swing?(上千年)为什么一个
小程序而不是
框架
JFrame
?(更容易)SWT被高估了。。。
public void paint (Graphics g)  // responsible for graphics "within" the window
{
    g.setColor (Color.black);

    g.setColor(colourNum == 1? Color.red : Color.red.darker().darker());
    g.fillOval (30, 40, 20, 20); // red light
    g.setColor(colourNum == 2? Color.yellow : Color.yellow.darker().darker());
    g.fillOval (30, 70, 20, 20); // yello light
    g.setColor(colourNum == 3? Color.green : Color.green.darker().darker());
    g.fillOval (30, 100, 20, 20); // green light
}