Elchapo
Elchapo

Reputation: 69

Creating an Array of JButton

Basically I am trying to make a Lightout game! I want to make an array of JButtons so I can keep track of the index of each of them (the reason being the state of each button is dependant on the state of the others)

so far I have:

JPanel panel = new JPanel();
    setTitle("Memory");
    setContentPane(panel);
    setPreferredSize(new Dimension(300, 300));
    panel.setLayout(new GridLayout(5,5));


    JButton[][] buttons = new JButton[5][5] ;
    for (int i = 0; i < 5; i++)
        for (int j = 0; j < 5; j++) {
          buttons[i][j] = new JButton();

    setDefaultCloseOperation(EXIT_ON_CLOSE);
    pack();
    setVisible(true);
        }

But this isnt working how I expect it to. I just got a big blank JFrame when I run this. Any help would be appreciated

Upvotes: 1

Views: 216

Answers (1)

Sajeev
Sajeev

Reputation: 848

The attached code should fix it. You were creating button, but not adding it to the JFrame. I have edited the code to add action listener which accesses the id of the JButton and displays it , when you click it.

public class CodeSample extends JFrame {

private static final long serialVersionUID = -8134989438964195251L;

public CodeSample() {
    JPanel panel = new JPanel();
    setTitle("Memory");
    setContentPane(panel);
    setPreferredSize(new Dimension(300, 300));
    panel.setLayout(new GridLayout(5, 5));
    ButtonListener listener = new ButtonListener();

    JButton[][] buttons = new JButton[5][5];
    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            buttons[i][j] = new JButton();
            buttons[i][j].setBackground(Color.black);
            buttons[i][j].putClientProperty("id",
                    String.valueOf(i).concat(String.valueOf(j)));
            buttons[i][j].addActionListener(listener);
            panel.add(buttons[i][j]);
        }
    }

    setDefaultCloseOperation(EXIT_ON_CLOSE);
    pack();
    setVisible(true);
}

public static class ButtonListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println(((JButton) e.getSource())
                .getClientProperty("id"));
    }

}

public static void main(String[] args) {
    new CodeSample();
}
} 

Upvotes: 5

Related Questions