как сделать Jpanel в массиве? - PullRequest
0 голосов
/ 06 мая 2018

Мне не очень нравится, как пишется код, я знаю, что он написан неправильно, так есть ли способ написать это более простым способом? Может быть, путем создания массива и циклического прохождения?

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;
}

Спасибо

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Как насчет использования import java.util.ArrayList; ?

public void createGUI() {
        setSize(WIDTH, HEIGHT);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
        //Panel related code will go here

        ArrayList<JPanel> array = new ArrayList<JPanel>();
        for(int i=1; i<=5; i++){
            array.add(new JPanel());

            switch(i){
                case 1: this.getContentPane().add(array.get(i).setBackground(Color.blue), BorderLayout.EAST);
                break;
                case 2: this.getContentPane().add(array.get(i).setBackground(Color.black), BorderLayout.WEST);
                break;
                case 3: this.getContentPane().add(array.get(i).setBackground(Color.cyan), BorderLayout.SOUTH);
                break;
                case 4: this.getContentPane().add(array.get(i).setBackground(Color.green), BorderLayout.CENTER);
                break;
                case 5: this.getContentPane().add(array.get(i).setBackground(Color.darkGray), BorderLayout.NORTH);
                break;
            }
        }

        repaint();
        this.setVisible(true);
    }
0 голосов
/ 06 мая 2018

Конечно, вы можете переписать ваш код, используя массивы и цикл.

В вашем 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]);
}

Но, как уже говорили другие: в зависимости от вашей цели, это может быть или не быть лучшей идеей для улучшения вашего кода.

...