Java “替换许多”;否则,如果;还有别的吗
我使用的是ActionListener,还有很多if语句,以便知道按下了哪个按钮,并根据按钮运行一些代码 有没有办法让代码变得更好?我还有将近10条其他的if语句紧跟其后,还有什么我可以使用的吗 代码示例:Java “替换许多”;否则,如果;还有别的吗,java,if-statement,Java,If Statement,我使用的是ActionListener,还有很多if语句,以便知道按下了哪个按钮,并根据按钮运行一些代码 有没有办法让代码变得更好?我还有将近10条其他的if语句紧跟其后,还有什么我可以使用的吗 代码示例: class BtnListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { if (e.getS
class BtnListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == menu.getOpen()) {
getFile();
} else if (e.getSource() == btnPlay) {
} else if (e.getSource() == btnQuit)) {
}
}
谢谢。您可以使用按钮的操作命令和开关盒块:
public void actionPerformed(ActionEvent e){
switch(e.getActionCommand()) {
case "Open":
open();
break;
case "Delete":
delete();
break;
default :
break;
}
}
当然,您必须首先设置每个按钮的操作命令,如:
openButton.setActionCommand("Open");
请注意,带有
字符串对象的switch case仅存在于JDK 7:之后。您可以使用按钮的操作命令和switch case块:
public void actionPerformed(ActionEvent e){
switch(e.getActionCommand()) {
case "Open":
open();
break;
case "Delete":
delete();
break;
default :
break;
}
}
当然,您必须首先设置每个按钮的操作命令,如:
openButton.setActionCommand("Open");
请注意,带字符串的switch case
对象仅存在于JDK 7之后:您可以在使用侦听器之前填充映射,例如在构造函数中,其中键是源
,值是动作事件的使用者。在实际操作中,只需按键获取使用者并调用它
class BtnListener implements ActionListener {
Map<Object, Consumer<ActionEvent>> eventsMap = new HashMap<>();
public BtnListener() {
eventsMap.put(menu.getOpen(), actionEvent -> this.getFile());
eventsMap.put(btnPlay, actionEvent -> { //do something
});
eventsMap.put(btnQuit, actionEvent -> { //do something else
});
}
@Override
public void actionPerformed(ActionEvent e) {
Optional.of(e)
.map(ActionEvent::getSource)
.map(eventsMap::get)
.ifPresent(
actionEventConsumer -> actionEventConsumer.accept(e)
);
}
}
类BtnListener实现ActionListener{
Map eventsMap=new HashMap();
公共BtnListener(){
eventsMap.put(menu.getOpen(),actionEvent->this.getFile());
eventsMap.put(btnPlay,actionEvent->{//do something
});
eventsMap.put(btnQuit,actionEvent->{//执行其他操作
});
}
@凌驾
已执行的公共无效操作(操作事件e){
可选。of(e)
.map(ActionEvent::getSource)
.map(eventsMap::get)
.如果在场(
actionEventConsumer->actionEventConsumer.accept(e)
);
}
}
您可以在使用侦听器之前填充映射
,例如在构造函数中,其中键是源
,值是动作事件的使用者。在实际操作中,只需按键获取使用者并调用它
class BtnListener implements ActionListener {
Map<Object, Consumer<ActionEvent>> eventsMap = new HashMap<>();
public BtnListener() {
eventsMap.put(menu.getOpen(), actionEvent -> this.getFile());
eventsMap.put(btnPlay, actionEvent -> { //do something
});
eventsMap.put(btnQuit, actionEvent -> { //do something else
});
}
@Override
public void actionPerformed(ActionEvent e) {
Optional.of(e)
.map(ActionEvent::getSource)
.map(eventsMap::get)
.ifPresent(
actionEventConsumer -> actionEventConsumer.accept(e)
);
}
}
类BtnListener实现ActionListener{
Map eventsMap=new HashMap();
公共BtnListener(){
eventsMap.put(menu.getOpen(),actionEvent->this.getFile());
eventsMap.put(btnPlay,actionEvent->{//do something
});
eventsMap.put(btnQuit,actionEvent->{//执行其他操作
});
}
@凌驾
已执行的公共无效操作(操作事件e){
可选。of(e)
.map(ActionEvent::getSource)
.map(eventsMap::get)
.如果在场(
actionEventConsumer->actionEventConsumer.accept(e)
);
}
}
如果您选择梯形图,您可以切换语句而不是其他语句
class BtnListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == menu.getOpen()) {
getFile();
}
switch( e.getSource() ){
case btnPlay:
break;
case btnQuit:
break;
default:
}
}
}
如果需要,您可以切换语句,而不是许多其他语句
class BtnListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == menu.getOpen()) {
getFile();
}
switch( e.getSource() ){
case btnPlay:
break;
case btnQuit:
break;
default:
}
}
}
避免所有“开销”的最好方法是用Lambda表示按钮。例如:
JButton b1 = new JButton("Play");
b1.addActionListener(e -> play());
...
JButton bn = new JButton("Stop");
bn.addActionListener(e -> stop());
...
private void play() {
....// playing codes
}
...
private void stop() {
...// stopping codes
}
...
避免所有“开销”的最好方法是用Lambda表示按钮。例如:
JButton b1 = new JButton("Play");
b1.addActionListener(e -> play());
...
JButton bn = new JButton("Stop");
bn.addActionListener(e -> stop());
...
private void play() {
....// playing codes
}
...
private void stop() {
...// stopping codes
}
...
也许switch
?显示你的代码-这听起来像是switch
对你有好处,但它并不适用于所有情况。你可以使用很多ActionListener
而不是一个共享的按钮。switch
语句??如果你在每个按钮上设置了动作命令,您可以在actionPerformed
方法中打开action命令。可能switch
?显示您的代码-这听起来像是switch
对,但它并不适用于所有情况。您可以使用大量的ActionListener
s,而不是一个共享的。switch
语句??如果在每个按钮上设置动作命令,则可以在actionPerformed
方法中打开动作命令。