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

我想检查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; } } 

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

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

是的,您可以在actionPerformed使用switch。

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

switch仅支持基本类型和enum (和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)); } } 

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

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

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

就像是:

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