我可以在Java中的actionPerformed方法中使用switch – case
我想检查ActionEvent e
和e.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": .... }