【问题标题】:How or can I generalize an If-statement for multiple JButtons (color changing)?我如何或可以为多个 JButtons 概括一个 If 语句(颜色变化)?
【发布时间】:2019-07-11 04:49:48
【问题描述】:

所以我试图让多个按钮在按下时做出相同的颜色变化。每个单独的印刷机应循环通过预定的颜色循环(白色、红色、绿色、黄色、蓝色、黑色)。我可以做一个很长的 if-else 语句,但我很确定有更好的方法,我就是想不出一个。

我已经在第二个 if 语句中尝试了“getSource().getBackground()”,但它无法获得与第一个 if 语句相同的变量。

 public void actionPerformed(ActionEvent e){   
    if(e.getSource() == btn1){  
      if(getSource().getBackground() == Color.white)  
        setBackground(Color.red);  
        else  
        setBackground(Color.white);  
    }  

如前所述,我试图将这里的工作量降到最低,并使其更有条理。

【问题讨论】:

    标签: java if-statement optimization


    【解决方案1】:

    一个可能的解决方案是这样的:

    1. 初始化“按钮按下”计数器。因此,在您的 actionPerformed 方法之外有一个变量,并在每次按下按钮时递增它。添加一些逻辑以在计数器值超过某个阈值时重置计数器值,即在您循环通过“最后”颜色后,返回第一种颜色。
    2. 有一个 switch 语句,它会根据计数器的值(本质上是按钮被按下的次数)设置背景。

    【讨论】:

      【解决方案2】:

      我要做的是创建一个检查和更改背景的函数,然后将我的所有按钮传递给它。

      public void checkAndChangeColor(Object source, Object btn, int bgToCheck, int bgToChange1, int bgToChange2){
          if (source == btn) {
              if (source.getBackground() == bgToCheck)
                  setBackground(bgToChange1);
              else
                  setBackground(bgToChange2);
          }
      }
      

      然后我会在每个按钮上调用该方法。

      checkAndChangeColor(e.getSource(), btn, Color.white, Color.red, Color.white);
      

      【讨论】:

        【解决方案3】:

        创建一个实现 ActionListener 的私有内部类,并在其中包含一组颜色。覆盖 actionPerformed 并有一个内部计数,所以 e.setBackground(colorList.get(count % colorList.size())

        【讨论】:

        • 对不起,它在手机上的格式很差,但这是您的 actionlistener 类的外观 private class ButtonListener implements ActionListener{ Private int count, Private ArrayList colors;公共 ButtonListener(){ this.count = 0; this.colors = ArrayList(Arrays.asList(Color.WHITE,Color.BLUE)); } @Override public void actionPerformed(ActionEvent e){ If(e.getSource instance of JButton){ JButton button = (JButton) e.getSource(); ( button.setBackground(colors.get(count)); button.repaint(); count = ++count % colors.size(); } }
        猜你喜欢
        • 2023-03-15
        • 2020-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-19
        • 1970-01-01
        • 2013-07-09
        • 1970-01-01
        相关资源
        最近更新 更多