Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “替换许多”;否则,如果;还有别的吗_Java_If Statement - Fatal编程技术网

Java “替换许多”;否则,如果;还有别的吗

Java “替换许多”;否则,如果;还有别的吗,java,if-statement,Java,If Statement,我使用的是ActionListener,还有很多if语句,以便知道按下了哪个按钮,并根据按钮运行一些代码 有没有办法让代码变得更好?我还有将近10条其他的if语句紧跟其后,还有什么我可以使用的吗 代码示例: class BtnListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { if (e.getS

我使用的是ActionListener,还有很多if语句,以便知道按下了哪个按钮,并根据按钮运行一些代码

有没有办法让代码变得更好?我还有将近10条其他的if语句紧跟其后,还有什么我可以使用的吗

代码示例:

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
方法中打开动作命令。