java - ActionPerformed 在 Java 中运行不佳

标签 java awt

我有一个程序,当我单击按钮时,每次单击它时颜色都会改变。我第一次点击它会工作得很好。但是,当我再次单击时,它不再起作用。我的代码中是否缺少某些内容?这是我的代码:

public class TrafficLight extends Frame implements ActionListener{

    protected Color red;
    protected Color yellow;
    protected Color orange;
    Button button;
    Panel panel;

    public TrafficLight(){
        red = Color.RED;
        yellow = Color.BLACK;
        orange = Color.BLACK;
        button = new Button("Change Color");
        add(button,BorderLayout.SOUTH);
        button.addActionListener(this);
    }

    @Override
    public void paint(Graphics graphics){
        graphics.drawRect(200, 50, 100, 300);

        graphics.setColor(red);
        graphics.fillOval(200, 50, 100, 100);

        graphics.setColor(yellow);
        graphics.fillOval(200,150,100, 100);

        graphics.setColor(orange);
        graphics.fillOval(200,250,100, 100);  

    }

    public static void main(String[] args) {

        TrafficLight light = new TrafficLight();
        light.setSize(500,500);
        light.setTitle("Traffic Light");
        light.setVisible(true);

    }

    @Override
    public void actionPerformed(ActionEvent event) {
       System.out.print(yellow);
        if(event.getSource() == button){
            if(red == red){
                red = Color.BLACK;
                yellow = Color.YELLOW;
            }
            else if(yellow == yellow){

                yellow = Color.BLACK;
                orange = Color.ORANGE;
            }
            System.out.print(yellow);
            repaint();
        }     
    }

}

最佳答案

你的问题是,你正在测试一个对象与其自身的相等性,这永远是正确的......

if (red == red) {

我想你想要的东西更像是......

@Override
public void actionPerformed(ActionEvent event) {
    if (event.getSource() == button) {
        if (red == Color.RED) {
            red = Color.BLACK;
            yellow = Color.YELLOW;
        } else if (yellow == Color.YELLOW) {
            yellow = Color.BLACK;
            orange = Color.ORANGE;
        }
        repaint();
    }
}

关于java - ActionPerformed 在 Java 中运行不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34892198/

相关文章:

java - 如何实时触发 MouseMotionListener 事件?

java - 如何使 BufferedImage 与该图像一起使用? (java)

java - 我可以在一个应用程序中同时实现 SAML 和基本的 Spring Security 吗?

java - Flex 正则表达式 到 Java 正则表达式

java - 更新 SQLite 数据库中的行会创建重复行

java - (JAVA) 将用户输入的单词与文本文件中包含的另一个单词进行比较

java - Java swing中JTabbedPane如何实现四侧阴影效果?

java - Android 从 GMT 毫秒获取 UTC 毫秒

java - 使用嵌入式 Jetty 提供部分内容

java - 运行没有main方法的Java程序?