我是非常基本的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的了解有限,我无法看出错误的位置。任何帮助将不胜感激。欢呼
答案 0 :(得分:3)
您忘记了每个break
case
语句
试试这个:
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)
永远不是真的,这就是为什么你会遇到这个问题。您可以尝试这样比较:
if(e.getSource().equals(colors))
比较对象时,请始终使用 .equals 方法。
答案 1 :(得分:1)
您应该在每个案例后使用break
。
case 0:
container.setBackground(Color.red);
break;
case 1:
container.setBackground(Color.yellow);
break;
....
答案 2 :(得分:1)
正如我的评论所述,您忘记在每个案例中添加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:
//What if none of above condition is satisfied.
}
修改: - 检查代码中的评论
class Lab17_4combo extends JFrame implements ActionListener
{
Container container;
JComboBox colors;// you declared 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);// You declared colors again. Change this line to
colors = new JComboBox(selectColor);
colors.setSelectedIndex(-1);
colors.addActionListener(this);
container.add(colors);
setVisible(true);
}
答案 3 :(得分:0)
你需要确保并添加休息时间;在案件的每一行之后,像这样:
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;
}
}else
{
container.setBackground(Color.magenta);
}
答案 4 :(得分:0)
在给定if
条件和switch语句的情况下,您总是看到洋红色。
对每个case
语句使用break。
在switch
声明中,对于每个case
,您没有break;
。因此,即使switch
找到有效的匹配case
,它也会执行该情况,并且在您的代码中(因为您不会破坏控件以避免出现这种情况),它最终将控件传递给匹配案例之后的案例,并且总是在最后一个案例中结束。