我可以在Java中的actionPerformed方法中使用switch - case

时间:2009-11-03 12:32:05

标签: java events action

我想查看ActionEvent ee.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;
    }
}

4 个答案:

答案 0 :(得分:8)

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

你当然可以把它写成一系列“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":
          ....
}