我的代码遇到了新问题。我知道什么是错的,但我无法弄清楚如何解决它。 代码应使按钮在单击时更改颜色和文本。第一次点击一切都很好,但第二次点击不好。 我认为我从一开始就将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);
}
}
}
});
}
}
答案 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)
这是我从您的代码中理解的内容 你创建了一个名为它的按钮“” 您将名称更改为黄色 你把它改为蓝色然后
您将背景设置为黄色,但文字仍为蓝色!
如果我的按钮被按下,则编写一个代码 如果文本为黄色,则将文本设置为蓝色和背景为蓝色
否则将文本设置为黄色并将背景设置为黄色。
所以答案是你按下按钮,文字是蓝色检测到的,所以它会进入其他部分,背景将变为黄色(在开始时也只是黄色) 文本再次为黄色,如果
,它将进入所以我建议删除我的按钮行。当您创建一个带有黄色背景的按钮时将文本设置为蓝色,使文本保持黄色,这样可以避免混淆并使事情变得更容易 希望我帮助你