AxB
AxB

Reputation: 1

Can I use a for loop to create objects in java?

Can I initialize multiple objects in a single loop?

Here's what a snippet of my code looks like. As you can see, it becomes hard to look at from a glance and takes up too much space.

I'd like to be able to create the buttons in one for loop and then modify in another for loop.

public class MyFrame extends JFrame {
    MyFrame() {

        JButton button1 = new JButton();
        JButton button2 = new JButton();
        JButton button3 = new JButton();
        JButton button4 = new JButton();
        JButton button5 = new JButton();
        JButton button6 = new JButton();
        JButton button7 = new JButton();
        JButton button8 = new JButton();
        JButton button9 = new JButton();
        JButton button0 = new JButton();


        button1.setBounds(60, 60, 50, 50);
        button2.setBounds(120,60,50,50);
        button3.setBounds(180,60,50,50);
        button4.setBounds(60,120,50,50);
        button5.setBounds(120,120,50,50);
        button6.setBounds(180,120,50,50);
        button7.setBounds(60,180,50,50);
        button8.setBounds(120,180,50,50);
        button9.setBounds(180,180,50,50);
        button0.setBounds(120,240,50,50);

    }
}

Upvotes: 0

Views: 350

Answers (2)

Gilbert Le Blanc
Gilbert Le Blanc

Reputation: 51445

Yes, you can use a for loop to create the buttons.

Here's a GUI I created.

Ten Button GUI

It's not a good idea to use absolute positioning (setBounds) when creating a GUI. You should use the Swing layout managers.

I used a GridLayout to position the buttons.

Here's the complete runnable code.

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TenButtonGUI implements Runnable {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new TenButtonGUI());
    }

    @Override
    public void run() {
        JFrame frame = new JFrame("Ten Button GUI");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(createMainPanel(), BorderLayout.CENTER);

        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    private JPanel createMainPanel() {
        JPanel panel = new JPanel(new GridLayout(0, 3, 5, 5));
        panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

        for (int i = 0; i < 11; i++) {
            if (i == 9) {
                JLabel label = new JLabel(" ");
                panel.add(label);
            } else {
                JButton button = new JButton();
                button.setPreferredSize(new Dimension(50, 50));
                panel.add(button);
            }
        }

        return panel;
    }

}

Upvotes: 3

gere
gere

Reputation: 1730

You could do something like this:

List<JButton> buttons = new ArrayList<>();
int[][] bounds = {{60, 60, 50, 50}, {120,60,50,50}}; //add more bound quadruplets

// iterating over the values in the bounds array
Arrays.asList(bounds).forEach(v -> {
    JButton button = new JButton();
    button.setBounds(v[0], v[1], v[2], v[3]);
    buttons.add(button);
});

In the end you will find your buttons in the buttons List.

Upvotes: 1

Related Questions