首页 > 解决方案 > 如何在数组中制作Jpanel?

问题描述

我真的不喜欢代码的编写方式,我知道它的编写方式很糟糕,那么有没有办法以更简单的方式编写它?也许通过制作一个数组并循环?

private JPanel pnl1; 
private JPanel pnl2; 
private JPanel pnl3; 
private JPanel pnl4; 
private JPanel pnl5; 

public void createGUI() {
    setSize(WIDTH, HEIGHT);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new BorderLayout());
    //Panel related code will go here
    pnl1 = createPanel(Color.blue);
    pnl2 = createPanel(Color.black);
    pnl3 = createPanel(Color.cyan);
    pnl4 = createPanel(Color.green);
    pnl5 = createPanel(Color.darkGray);
    this.getContentPane().add(pnl1, BorderLayout.EAST);
    this.getContentPane().add(pnl2, BorderLayout.WEST);
    this.getContentPane().add(pnl3, BorderLayout.SOUTH);
    this.getContentPane().add(pnl4, BorderLayout.CENTER);
    this.getContentPane().add(pnl5, BorderLayout.NORTH);

    repaint();
    this.setVisible(true);
}

private JPanel createPanel(Color c) {
    //Create a JPanel object and store it in a local var
    //set the background colour to that passed in c
    //Return the JPanel object
    JPanel jp = new JPanel();
    jp.setBackground(c);
    return jp;
}

谢谢

标签: javajpanel

解决方案


当然可以使用数组和循环重写您的代码。

在您的createGUI()方法中,您可以执行以下操作:

Color[] colors = {
        Color.blue, Color.black, Color.cyan, Color.green, Color.darkGray
};
Object[] constraints = {
        BorderLayout.EAST, BorderLayout.WEST, BorderLayout.SOUTH, BorderLayout.CENTER, BorderLayout.NORTH
};
for (int i = 0; i < 5; i++) {
    JPanel panel = createPanel(colors[i]);
    this.getContentPane().add(panel, constraints[i]);
}

但正如其他人已经评论的那样:根据您的目标,这可能是也可能不是改进代码的最佳主意。


推荐阅读