gpt4 book ai didi

Java switch case 未按预期运行

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:20 24 4
gpt4 key购买 nike

我是一名非常基础的 Java 学生。我们做了一个任务,根据使用多个 if 语句选择的单选按钮来改变背景颜色。效果很好。我决定将选择过程更改为组合框并使用开关盒。在我看来,该过程使 switch case 方法中的 if 语句失败。我正在努力更好地了解事情的运作方式。代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

class Lab17_4combo extends JFrame implements ActionListener
{
Container container;
JComboBox colors;

public Lab17_4combo()
{
super("ComboBox ");
container = this.getContentPane();
container.setLayout(new FlowLayout());
setSize(300,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

String[] selectColor = {"Red", "Yellow", "Blue", "Green", "Magenta"};
JComboBox colors = new JComboBox(selectColor);
colors.setSelectedIndex(-1);
colors.addActionListener(this);

container.add(colors);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
int chgColor;

if(e.getSource() == colors)
{
chgColor = colors.getSelectedIndex();

switch(chgColor)
{
case 0:
container.setBackground(Color.red);
case 1:
container.setBackground(Color.yellow);
case 2:
container.setBackground(Color.blue);
case 3:
container.setBackground(Color.green);
case 4:
container.setBackground(Color.magenta);
}
}else
{
container.setBackground(Color.magenta);
}

}
public static void main(String[] args)
{
Lab17_4combo s = new Lab17_4combo();
}
}

我放入 else 以检查它是否未通过 if。我假设这就是问题所在,但我不知道如何解决。任何帮助将不胜感激。原来的作业已经完成,这是我自己的实验。我不要求任何人为我做功课。干杯

编辑--我已经对代码进行了建议的更改(感谢所有人的建议)。无论我从组合框中做出什么选择,容器的背景颜色仍然不会改变。我假设代码中的其他地方有错误,但我找不到它们。我的期望是容器的背景颜色会根据我从组合框中所做的选择而改变。这不会发生。

修改后的代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

class Lab17_4combo extends JFrame implements ActionListener
{
Container container;
JComboBox colors;

public Lab17_4combo()
{
super("ComboBox ");
container = this.getContentPane();
container.setLayout(new FlowLayout());
setSize(300,200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

String[] selectColor = {"Red", "Yellow", "Blue", "Green", "Magenta"};
JComboBox colors = new JComboBox(selectColor);
colors.setSelectedIndex(-1);
colors.addActionListener(this);

container.add(colors);
setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
int chgColor;

if(e.getSource() == colors)
{
chgColor = colors.getSelectedIndex();

switch(chgColor)
{
case 0:
container.setBackground(Color.red);
break;
case 1:
container.setBackground(Color.yellow);
break;
case 2:
container.setBackground(Color.blue);
break;
case 3:
container.setBackground(Color.green);
break;
case 4:
container.setBackground(Color.magenta);
break;
}
}
}
public static void main(String[] args)
{
Lab17_4combo s = new Lab17_4combo();
}
}

由于我对 Java 的了解有限,我看不出哪里可能有错误。任何帮助将不胜感激。干杯

最佳答案

你忘记了在每个 case 之后的 break 语句

试试这个:

switch(chgColor)
{
case 0:
container.setBackground(Color.red);
break;
case 1:
container.setBackground(Color.yellow);
break;
case 2:
container.setBackground(Color.blue);
break;
case 3:
container.setBackground(Color.green);
break;
case 4:
container.setBackground(Color.magenta);
break;
default:
//You may add a default case here.
}

编辑:-

我觉得你的情况

if(e.getSource() == colors)

is never true that's why you are getting this problem.你可以尝试这样比较:

if(e.getSource().equals(colors))

始终使用 .equals 比较对象时的方法。

关于Java switch case 未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20251855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com