Have a look at this. There is a 2D array of JButton
. When you click the random button, it will check to see if the button at a random index has an X or not, if not it it will set the text. Let me know if there's anything you don't understand
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.LineBorder;
public class RandomButton {
JButton[][] buttons = new JButton[10][10];
JButton randomButton = new JButton("Choose Random Button");
public RandomButton() {
JPanel panel = new JPanel(new GridLayout(10, 10));
initButtons(panel);
randomButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
while (true) {
int[] indices = getRandom();
int i = indices[0];
int j = indices[1];
if (!"X".equals(buttons[i][j].getText())) {
buttons[i][j].setForeground(Color.BLUE);
buttons[i][j].setText("X");
break;
}
}
}
});
randomButton.setBorder(new LineBorder(Color.black, 5));
panel.setBorder(new LineBorder(Color.BLACK, 5));
JFrame frame = new JFrame("Random Button");
frame.add(panel);
frame.pack();
frame.add(randomButton, BorderLayout.PAGE_END);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public int[] getRandom() {
Random rand = new Random();
int i = rand.nextInt(10);
int j = rand.nextInt(10);
int[] indices = {i, j};
return indices;
}
private void initButtons(JPanel panel) {
for (int i = 0; i < buttons.length; i++) {
for (int j = 0; j < buttons[i].length; j++) {
buttons[i][j] = new JButton("O");
panel.add(buttons[i][j]);
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new RandomButton();
}
});
}
}
UPDATE
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.border.LineBorder;
public class RandomButton {
JButton[][] buttons = new JButton[10][10];
JButton randomButton = new JButton("Choose Random Button");
public RandomButton() {
JPanel panel = new JPanel(new GridLayout(10, 10));
initButtons(panel);
panel.setBorder(new LineBorder(Color.BLACK, 5));
JFrame frame = new JFrame("Random Button");
frame.add(panel);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
JButton button = (JButton)e.getSource();
System.out.println(button.getText());
}
}
private void initButtons(JPanel panel) {
ButtonListener listener = new ButtonListener();
int count = 1;
for (int i = 0; i < buttons.length; i++) {
for (int j = 0; j < buttons[i].length; j++) {
JButton button = new JButton(String.valueOf(count));
buttons[i][j] = button;
button.addActionListener(listener);
panel.add(button);
count++;
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new RandomButton();
}
});
}
}