Ваш вопрос очень похож на этот вопрос .
По сути вы хотите использовать ActionEvent.getSource()
и привести его к JButton
. Затем вы можете делать все, что вы хотите для JButton
(изменить цвет фона, изменить текст и т. Д. c.)
РЕДАКТИРОВАТЬ: я не понял, что вы хотели получить x
и y
кнопки JButton.
public class TicTacToe {
public static TicTacToeButton[][] buttonsall = new TicTacToeButton[3][3];
public static JFrame frame = new JFrame("TIC TAC TOE");
public static void draw() {
// frame
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setResizable(false);
frame.setBackground(Color.white);
frame.setBounds(500, 500, 600,600);
// actionListener
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source instanceof TicTacToeButton) {
TicTacToeButton btn = (TicTacToeButton) source;
int btnBoardX = btn.getBoardX();
int btnBoardY = btn.getBoardY();
// Go ahead and do what you like
}
}
};
//buttons buttonsall[x][y]
for (int y = 0; y<3;y++) {
for (int x = 0; x<3;x++) {
buttonsall[x][y] = new TicTacToeButton(x, y);
buttonsall[x][y].setVisible(true);
buttonsall[x][y].setSize(80, 80);
buttonsall[x][y].addActionListener(listener);
System.out.println(buttonsall[x][y] +" "+x +" "+y);
frame.add(buttonsall[x][y]);
buttonsall[x][y].setBackground(Color.white);
}
}
frame.setLayout(new GridLayout(3,3));
}
private static class TicTacToeButton extends JButton {
private int boardX;
private int boardY;
public TicTacToeButton(int boardX, int boardY) {
super();
this.boardX = boardX;
this.boardY = boardY;
}
public int getBoardX() {
return this.boardX;
}
public int getBoardY() {
return this.boardY;
}
}
}