1

I'm creating a simple Minesweeper game in Java. Size 9x9.

I create an array of JPanels and an array of buttons; I add each button to its respective JPanel. then i add the JPanels to the JFrame.

How do i distinguish between each button on the action event?

Here's some of my code:

int gridx = 9;
int gridy = 9;
JButton[] buttons = new JButton[gridx*gridy];
JPanel[] jpanels = new JPanel[gridx*gridy];

public Minesweeper(){

    super("Minesweeper");


    setLayout(new GridLayout(9,9));
    JPanel panel = new JPanel();
    int i = 0;
    for(i = 0; i<gridx*gridy; i++){
        jpanels[i] = new JPanel();
        buttons[i] = new JButton();
        buttons[i].addActionListener(buttonEvent);
        jpanels[i].setLayout(new GridLayout(1,1));
        jpanels[i].add(buttons[i]);
        add(jpanels[i]);            
    }
    //buttons[67].setEnabled(false);
    setSize(300,300);
    setVisible(true);
}

The only way i can think about doing this is adding text to the button like so:

    buttons[i] = new JButton(i);

Then calling getActionCommand() but i dont want text to show up on the button. Any other ideas?

9
  • I suspect you can play with the getSource() method of the ActionEvent object that you get when you get called back on your ActionListener#actionPerformed method stub. Commented May 1, 2014 at 18:07
  • You do not need jpanels, and here it might work better to leave out panel too, as the content pane got the GridLayout. Commented May 1, 2014 at 18:12
  • FYI, is there any particular reason why you're using a JButton[] instead of a JButton[][]? Sure you can map your JButton[81] to a JButton[9][9] but why would you? Commented May 1, 2014 at 18:58
  • Yeah i just switched it to a 2d array Commented May 1, 2014 at 20:07
  • 1
    @Cruncher Nevermind, i figured it out :) Commented May 1, 2014 at 20:45

1 Answer 1

1

You can use AbstractButton#setActionCommand.

In your loop:

buttons[i].setActionCommand(i+"");

Then you'll get i back when you use getActionCommand

Note I did mention in a comment on another answer that I would create a new class Mine which extends JButton which I believe to be a better and more complete solution. This however gets the job done rather quickly.

Sign up to request clarification or add additional context in comments.

2 Comments

Ahh! Yes, this does it. I didnt know you could set things other than strings in that. Thank you! I will mark yours as an accepted answer once i get enough reputation to do so.
@user3521471 You can only set String as the action command. The i+"" converts i to a String. When you use getActionCommand you're going to have to convert it back to an integer.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.