2

我想检查使用ActionEvent e和发生了哪个 actionEvent e.getSource()。我可以为此使用开关盒吗?

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;
    }
}
4

4 回答 4

8

不,你不能。您可以在 switch 语句中使用的类型非常有限。请参阅switch 语句

你当然可以把它写成一系列“if”和“else if”语句。

于 2009-11-03T12:38:10.127 回答
8

是的,您可以使用 switch in actionPerformed

不,你不能像你在这里展示的那样使用它。

switch仅支持原始类型和enums(和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));
    }
}
于 2009-11-03T12:35:44.710 回答
4

正如其他解决方案所指出的那样,您不能在这种情况下使用 switch 。然而,与其实现一个ActionListener包含一个大的 if-then 块,为什么不ActionListeners为每个事件源单独实现呢?这是一种更加基于 OO 的方法。

通常,您的ActionListener实现无论如何都是(小)匿名内部类,因此您不必处理大量的 .java 文件。

于 2009-11-03T13:12:58.217 回答
1

ActionEvent包含ActionCommand一个字符串字段。如果在创建时未设置,Button则默认为按钮的文本。您可以改用它。

就像是:

switch(e.getActionCommand()) {
    case "Radius":
          ....
    case "Height":
          ....
}
于 2015-07-31T05:00:02.257 回答