我想查看ActionEvent e
和e.getSource()
发生了哪次actionEvent。我可以使用开关盒吗?
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;
}
}
答案 0 :(得分:8)
你当然可以把它写成一系列“if”和“else if”语句。
答案 1 :(得分:6)
是的,您可以在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));
}
}
答案 2 :(得分:3)
正如其他解决方案所指出的,您不能在此上下文中使用switch。但是,为什么不为每个事件源实现单独的ActionListener
,而不是实现一个包含大if-then块的ActionListeners
?这是一种更加基于OO的方法。
通常,您的ActionListener
实现将是(小)匿名内部类,因此您不必处理大量的.java文件。
答案 3 :(得分:1)
ActionEvent
包含一个ActionCommand
字段,它是一个字符串。如果在创建Button
时未设置,则默认为按钮文本。你可以改用它。
类似的东西:
switch(e.getActionCommand()) {
case: "Radius":
....
case: "Height":
....
}