首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >摇摆食品菜单

摇摆食品菜单
EN

Code Review用户
提问于 2016-01-20 15:35:37
回答 1查看 1.5K关注 0票数 1

我想知道是否有可能以这样的方式重新考虑我的代码,以消除几乎相同语句的重复,阻止变量名,以及使用方法初始化它是为了什么。下面是所讨论的代码:

代码语言:javascript
运行
复制
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;

import javax.swing.AbstractButton;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class Menu extends JFrame {
  private JButton jbtChoc1 = new JButton("cross.gif");
  private JButton jbtChoc2 = new JButton("nought.gif");
  private JButton jbtChoc3 = new JButton("cross.gif");
  private JButton jbtChoc4 = new JButton("nought.gif");
  private JButton jbtChoc5 = new JButton("cross.gif");
  private JButton jbtChoc6 = new JButton("nought.gif");
  private JLabel foodLabelChoice = new JLabel("Main Dishes");
  private ImageIcon food1Image = new ImageIcon("cross.gif");
  private ImageIcon food2Image = new ImageIcon("nought.gif");
  private ImageIcon food3Image = new ImageIcon("cross.gif");
  private ImageIcon food4Image = new ImageIcon("nought.gif");
  private ImageIcon food5Image = new ImageIcon("cross.gif");
  private ImageIcon food6Image = new ImageIcon("nought.gif");

  /**
   * Constructor for the Menu.
   */

  public Menu() {
    Container cont = getContentPane();
    cont.setLayout(new BorderLayout(5, 5));;
    cont.setBackground(Color.white);

    cont.add(foodLabelChoice, BorderLayout.NORTH);


    JPanel girdSetup = new JPanel(new GridLayout(2, 3, 5, 5));
    jbtChoc1.setIcon(food1Image);
    girdSetup.add(jbtChoc1);
    jbtChoc1.setVerticalTextPosition(AbstractButton.BOTTOM);
    jbtChoc1.setHorizontalTextPosition(AbstractButton.CENTER);

    jbtChoc2.setIcon(food2Image);
    girdSetup.add(jbtChoc2);
    jbtChoc2.setVerticalTextPosition(AbstractButton.BOTTOM);
    jbtChoc2.setHorizontalTextPosition(AbstractButton.CENTER);

    jbtChoc3.setIcon(food3Image);
    girdSetup.add(jbtChoc3);
    jbtChoc3.setVerticalTextPosition(AbstractButton.BOTTOM);
    jbtChoc3.setHorizontalTextPosition(AbstractButton.CENTER);

    jbtChoc4.setIcon(food4Image);
    girdSetup.add(jbtChoc4);
    jbtChoc4.setVerticalTextPosition(AbstractButton.BOTTOM);
    jbtChoc4.setHorizontalTextPosition(AbstractButton.CENTER);

    jbtChoc5.setIcon(food5Image);
    girdSetup.add(jbtChoc5);
    jbtChoc5.setVerticalTextPosition(AbstractButton.BOTTOM);
    jbtChoc5.setHorizontalTextPosition(AbstractButton.CENTER);

    jbtChoc6.setIcon(food6Image);
    girdSetup.add(jbtChoc6);
    jbtChoc6.setVerticalTextPosition(AbstractButton.BOTTOM);
    jbtChoc6.setHorizontalTextPosition(AbstractButton.CENTER);

    cont.add(girdSetup, BorderLayout.CENTER);
  }

  /**
   * Main method for test.
   * 
   * @param args Initial setup.
   */

  public static void main(String[] args) {
    Menu frame = new Menu();
    frame.setTitle("Menu");
    frame.setSize(950, 400);
    frame.setVisible(true);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  }
} 

我希望删除JButton和ImageIcon声明的复制以及它们在构造函数中的设置,这样我只需调用一个方法,而不是复制/粘贴代码。

EN

回答 1

Code Review用户

回答已采纳

发布于 2016-01-20 15:44:17

我看到的主要重复是:

代码语言:javascript
运行
复制
jbtChoc1.setIcon(food1Image);
girdSetup.add(jbtChoc1);
jbtChoc1.setVerticalTextPosition(AbstractButton.BOTTOM);
jbtChoc1.setHorizontalTextPosition(AbstractButton.CENTER);

因此,让我们创建一组数组:

代码语言:javascript
运行
复制
ImageIcon[] fooImages = new ImageIcon[6];
JButton[] jbtChoc = new JButton[6];

我们使用字符串数组填充它们:

代码语言:javascript
运行
复制
private static final String[] names = {"cross.gif", "nought.gif", 
                                       "cross.gif", "nought.gif", 
                                       "cross.gif", "nought.gif"};

for(int i = 0; i < names.length; i++){
    jbtChoc[i] = new JButton(names[i]);
    fooImages[i] = new ImageIcon(names[i]);
}

然后,您也可以在循环中调用原始代码块:

代码语言:javascript
运行
复制
JPanel girdSetup = new JPanel(new GridLayout(2, 3, 5, 5));

for(int i = 0; i<food1Image.length;i++){
    jbtChoc[i].setIcon(foodImage[i]);
    girdSetup.add(jbtChoc[i]);
    jbtChoc[i].setVerticalTextPosition(AbstractButton.BOTTOM);
    jbtChoc[i].setHorizontalTextPosition(AbstractButton.CENTER);
}

cont.add(girdSetup, BorderLayout.CENTER);
票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/117369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档