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

问题描述:

我想检查哪一个actionEvent发生了ActionEvent ee.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)); 
    } 
} 
+4

您还可以切换上枚举。 – 2009-11-03 12:37:23

+0

谢谢,不好。所以我想我不能使用开关,那么情况。 – Fred 2009-11-03 12:40:34

+1

字符串是否真的允许在交换机中使用?我虽然只在Java 7中使用,不是吗? – quosoo 2009-11-03 12:45:53

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

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

+0

感谢您的链接。很高兴知道,我想问一下,在放弃它之前,确保没有任何方法可以解决它,'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": 
      .... 
}