【问题标题】:How to make a switch statement loop back to beginning如何使switch语句循环回到开头
【发布时间】:2015-01-10 22:17:05
【问题描述】:

我有一个名为nextAd 的JButton,每次单击它时都会增加我的private int i; 加1,每次单击时显示不同的图像。第四次单击按钮后,我希望我的 GUI 循环回到单击按钮 0 次时,显示我第一次运行程序时屏幕上最初显示的内容。

问题:如何让我的switch 语句循环回到我第一次启动 GUI 程序时屏幕上的内容?

我已经省略了我的其余代码,除了按钮单击操作。如果需要更多代码才能回答问题,请告诉我。

private class buttonListener implements ActionListener

    {

        @Override
        public void actionPerformed(ActionEvent e) 
        {
        {
        if(e.getSource() == nextAd)
        {
            i++;    
        }
    switch (i){

        case 1:
            appleTitle.setVisible(false);
            appleAdPic.setVisible(false);
            appleLogo.setVisible(false);
            IBMTitle.setVisible(true);
            IBMAdPic.setVisible(true);
            IBMLogo.setVisible(true);
            break;

        case 2:
            IBMTitle.setVisible(false);
            IBMAdPic.setVisible(false);
            IBMLogo.setVisible(false);
            microsoftTitle.setVisible(true);
            microsoftAdPic.setVisible(true);
            microsoftLogo.setVisible(true);
            break;

        case 3:
            microsoftTitle.setVisible(false);
            microsoftAdPic.setVisible(false);
            microsoftLogo.setVisible(false);
            samsungTitle.setVisible(true);
            samsungAdPic.setVisible(true);
            samsungLogo.setVisible(true);
            break;      
            }

        } 
        }
        }
    }

【问题讨论】:

  • 在开关周围添加一个带有中断条件的循环
  • 这样的东西会是什么样子?像这样? '而(我!= 3); { 切换 (i){'
  • @JordanPurinton 它看起来像一个外观,就像 while 在一行中,而 switch 在那个 while 块内。

标签: java image events button


【解决方案1】:

我认为最简单的解决方案是在 actionPerformed() if i == 3; 结束时将增量值设置为 0;

public void actionPerformed(ActionEvent event) {
    // ...
    if (i == 3) {
        i = 0; // Reset the ad counter to 0, to restart the ad loop
    }
}

这样,下次调用actionPerformed()时,它会从头开始。

【讨论】:

    【解决方案2】:

    您可以将事件处理程序的开始更改为:

     if(e.getSource() == nextAd)
     {
           i = (i == 3 ? 1 : i + 1);    
     }
    

    【讨论】:

    • 这样做会在开关周围循环吗??
    • 是的,第四次点击会再次执行案例1
    【解决方案3】:

    我们能不能没有默认情况,里面可以设置所谓的0次场景?

    例如:

    default:
            appleTitle.setVisible(false);
            appleAdPic.setVisible(false);
            appleLogo.setVisible(false);
            IBMTitle.setVisible(false);
            IBMAdPic.setVisible(false);
            IBMLogo.setVisible(false);
            break;
    

    【讨论】:

      【解决方案4】:

      可能最好的方法是将 switch 语句放入返回类型为 void 的单独方法中,就像

      private class buttonListener implements ActionListener
      
      {
      
          @Override
          public void actionPerformed(ActionEvent e) 
          {
          {
          if(e.getSource() == nextAd)
          {
              i++;    
          }
          switching()
          }
          }
      }
      
      public static void switching() {
        switch (i){
      
            case 1:
                appleTitle.setVisible(false);
                appleAdPic.setVisible(false);
                appleLogo.setVisible(false);
                IBMTitle.setVisible(true);
                IBMAdPic.setVisible(true);
                IBMLogo.setVisible(true);
                break;
      
            case 2:
                IBMTitle.setVisible(false);
                IBMAdPic.setVisible(false);
                IBMLogo.setVisible(false);
                microsoftTitle.setVisible(true);
                microsoftAdPic.setVisible(true);
                microsoftLogo.setVisible(true);
                break;
      
            case 3:
                microsoftTitle.setVisible(false);
                microsoftAdPic.setVisible(false);
                microsoftLogo.setVisible(false);
                samsungTitle.setVisible(true);
                samsungAdPic.setVisible(true);
                samsungLogo.setVisible(true);
                break;      
                }
            case 4:
                i = 0;
                switching();
                break;
      
      }
      

      【讨论】:

        【解决方案5】:

        这是我要做的:

        if (e.getSource() == nextAd) {
            if (i >= 3) {
                i = 1;
            } else {
                i++;
            }
        }
        

        【讨论】:

          【解决方案6】:

          这是我的解决方案。 谢谢大家!

              if(e.getSource() == nextAd)
                  {
                      i++;
                  {
                      if(i == 5)
                      {
                          i = 0;
                          samsungTitle.setVisible(false);
                          samsungAdPic.setVisible(false);
                          samsungLogo.setVisible(false);
                      }
                 switch (i){
          
                 case 1:
                     appleTitle.setVisible(true);
                     appleAdPic.setVisible(true);
                     appleLogo.setVisible(true);
                     break;
          
                  case 2:
                      appleTitle.setVisible(false);
                      appleAdPic.setVisible(false);
                      appleLogo.setVisible(false);
                      IBMTitle.setVisible(true);
                      IBMAdPic.setVisible(true);
                      IBMLogo.setVisible(true);
                      break;
          
                  case 3:
                      IBMTitle.setVisible(false);
                      IBMAdPic.setVisible(false);
                      IBMLogo.setVisible(false);
                      microsoftTitle.setVisible(true);
                      microsoftAdPic.setVisible(true);
                      microsoftLogo.setVisible(true);
                      break;
          
                  case 4:
                      microsoftTitle.setVisible(false);
                      microsoftAdPic.setVisible(false);
                      microsoftLogo.setVisible(false);
                      samsungTitle.setVisible(true);
                      samsungAdPic.setVisible(true);
                      samsungLogo.setVisible(true);
                      break;      
                      }
          
                  } 
                  }
                  }
              }
          }
          
          
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-10-26
            • 2020-04-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多