我可以使用switch-case,in actionPerformed方法在Java中
我想检查哪一个actionEvent发生了ActionEvent e
和e.getSource()
。我可以为此使用开关盒吗?我可以使用switch-case,in actionPerformed方法在Java中
public void actionPerformed(ActionEvent e){
switch(e.getSource()){
case radius:
double r = validate(radius.getText());
break;
case height:
double h = validate(height.getText());
break;
case out:
out.setText(String.valueOf(h*r));
break;
}
}
是的,您可以使用actionPerformed
中的开关。
不,你不能像你在这里展示的那样使用它。
switch
仅支持基本类型和enum
s(和String
,但仅在Java 7和更高版本中)。
另一个问题是case-values值必须是编译时间常量。
你需要这样的代码:
public void actionPerformed(ActionEvent e){
if (e.getSource() == radius) {
double r = validate(radius.getText());
else if (e.getSource() == height) {
double h = validate(height.getText());
else if (e.getSource() == out) {
out.setText(String.valueOf(h*r));
}
}
不,你不能。您可以在switch语句中使用的类型非常有限。 见The switch Statement。
你当然可以把它写成一系列“if”和“else if”语句。
感谢您的链接。很高兴知道,我想问一下,在放弃它之前,确保没有任何方法可以解决它,'if,else'。 – Fred 2009-11-03 13:09:39
正如其他解决方案已经指出的那样,在这种情况下不能使用开关。但是,不是实现一个包含大if-block的ActionListener
,为什么不为每个事件源实现单独的ActionListeners
?这是一个更加基于OO的方法。
通常,您的ActionListener
实现将是(小)匿名内部类,因此您不必处理大量的.java文件。
ActionEvent
包含一个ActionCommand
字段,它是一个字符串。如果在创建Button
时未设置,则默认为按钮的文本。你可以用它来代替。
喜欢的东西:
switch(e.getActionCommand()) {
case: "Radius":
....
case: "Height":
....
}
您还可以切换上枚举。 – 2009-11-03 12:37:23
谢谢,不好。所以我想我不能使用开关,那么情况。 – Fred 2009-11-03 12:40:34
字符串是否真的允许在交换机中使用?我虽然只在Java 7中使用,不是吗? – quosoo 2009-11-03 12:45:53