case吗

bqujaahr  于 2021-07-05  发布在  Java
关注(0)|答案(4)|浏览(389)

我想检查发生了什么actionevent ActionEvent e 以及 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;
    }
}
6ju8rftf

6ju8rftf1#

不,你不能。switch语句中可以使用的类型非常有限。请参阅switch语句。
当然,你可以把它写成一系列“if”和“elseif”语句。

6vl6ewon

6vl6ewon2#

正如其他解决方案所指出的,在这种情况下不能使用switch。然而,与其实现一个 ActionListener 包含一个大的if-then块,为什么不单独实现呢 ActionListeners 对于每个事件源?这是一种更加基于oo的方法。
通常是你的 ActionListener 无论如何,实现都是(小的)匿名内部类,因此您不必处理大量的.java文件。

cl25kdpy

cl25kdpy3#

这个 ActionEvent 包含 ActionCommand 是字符串的字段。如果在创建 Button 它默认为按钮的文本。你可以用它来代替。
比如:

switch(e.getActionCommand()) {
    case "Radius":
          ....
    case "Height":
          ....
}
ki1q1bka

ki1q1bka4#

是的,你可以用开关 actionPerformed .
不,你不能像这里展示的那样使用它。 switch 仅支持基元类型和 enum s(和 String ,但仅限于Java7和更高版本)。
另一个问题是case值必须是编译时常量。
您需要这样的代码:

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

相关问题