if,else语句并没有真正解决

时间:2016-02-07 17:05:46

标签: java if-statement button

我的代码遇到了新问题。我知道什么是错的,但我无法弄清楚如何解决它。 代码应使按钮在单击时更改颜色和文本。第一次点击一切都很好,但第二次点击不好。 我认为我从一开始就将MyButtons字符串设置为“Yellow”。即使“if statment”改变它,else语句也不会起作用,因为静态字符串“yellow”。虽然它看起来已经改变了。 但我可能是错的。其他解释可能是,当它被点击时,它只是重新开始并且不会比“if”更长。 这是一个功课,所以我需要使用swing。*;而不是javaFX。

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.event.*;
import javax.swing.*;

public class Sparkling extends JFrame 
{
    public static void main(String[] args)
        {
            JFrame frame = new JFrame ("So Many Colors");
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(300, 300);
            frame.setLayout(new FlowLayout());

            JButton MyButton = new JButton("");
            MyButton.setText("Yellow");
            MyButton.setText("Yellow");  /* Accidently put this here, 
            was messing around before copypaste. My bad */

            MyButton.setBackground(Color.YELLOW);
            frame.add(MyButton);

                MyButton.addActionListener(new ActionListener()
                {

                    public void actionPerformed(ActionEvent e) 
                    {

                        if ( e.getSource().equals(MyButton) )
                        {
                            if(MyButton.getText().equals("Yellow"))
                            {
                                MyButton.setText("Blue");
                                MyButton.setBackground(Color.BLUE);
                            }

                            else (MyButton.getText().equals("Blue"))
                            {
                                MyButton.setText("Yellow");
                                MyButton.setBackground(Color.YELLOW);
                            }
                    }

                }



                });

        }
}

3 个答案:

答案 0 :(得分:1)

由于您已将ActionListener添加到MyButton,因此无需检查“ if(e.getSource()。equals(myButton))”,因为它始终相等。

    JButton MyButton = new JButton("");
    MyButton.setText("Yellow");
    //MyButton.setText("Blue"); <----------Get rid of this line
    MyButton.setBackground(Color.YELLOW);
    frame.add(MyButton);

    MyButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
                if (MyButton.getText().equals("Yellow")) {
                    MyButton.setText("Blue");
                    MyButton.setBackground(Color.BLUE);
                } else {
                    MyButton.setText("Yellow");
                    MyButton.setBackground(Color.YELLOW);
                }
            }
    });

坚持命名惯例规则,正如Elliott建议的那样。

答案 1 :(得分:0)

Java命名约定的变量名称以小写字母开头。并且您不需要else的条件(因为您有二进制状态,黄色 蓝色)。你可以做点什么,

JButton myButton = new JButton("Yellow");
myButton.setBackground(Color.YELLOW);
frame.add(myButton);
myButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(myButton)) {
            if (myButton.getText().equals("Yellow")) {
                myButton.setText("Blue");
                myButton.setBackground(Color.BLUE);
            } else {
                // (MyButton.getText().equals("Blue"))
                myButton.setText("Yellow");
                myButton.setBackground(Color.YELLOW);
            }
        }
    }
});

更新

我用你的其他代码执行了(按钮按照预期在黄色 蓝色之间循环)。

答案 2 :(得分:0)

这是我从您的代码中理解的内容 你创建了一个名为它的按钮“” 您将名称更改为黄色 你把它改为蓝色然后

您将背景设置为黄色,但文字仍为蓝色!

如果我的按钮被按下,则编写一个代码 如果文本为黄色,则将文本设置为蓝色和背景为蓝色

否则将文本设置为黄色并将背景设置为黄色。

所以答案是你按下按钮,文字是蓝色检测到的,所以它会进入其他部分,背景将变为黄色(在开始时也只是黄色) 文本再次为黄色,如果

,它将进入

所以我建议删除我的按钮行。当您创建一个带有黄色背景的按钮时将文本设置为蓝色,使文本保持黄色,这样可以避免混淆并使事情变得更容易 希望我帮助你