一个Action Listnener用于面板阵列中的按钮阵列



我正试图为一组按钮制作一个动作监听器。我通过制作一个3乘3的面板网格来创建网格,每个面板中都有一个3乘以3的按钮网格。我需要一种方法让动作监听器知道按下了哪个按钮。有人有什么想法吗?

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class GameBoardDisplayTest {
    protected JFrame gameBoardFrame = new JFrame();
    protected JButton[] buttonArray = new JButton[9];
    protected JPanel[] panelArray = new JPanel[9];
    protected String playerXName;
    protected String playerOName;
    protected JPanel gameStatePanel = new JPanel(new GridLayout(3,1));

    public GameBoardDisplayTest(String player1, String player2){
        playerXName = player1;
        playerOName = player2;
        gameBoardFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gameBoardFrame.setSize(1000,1000);
        gameBoardFrame.setLocationRelativeTo(null);
        gameBoardFrame.setVisible(true);
        gameBoardFrame.setLayout(new GridLayout(4,3,10,10));
        for (int i = 0; i != 9; i++){
            panelArray[i] = new JPanel(new GridLayout(3,3));
            }
        for (int i = 0; i != 9; i++){
            for (int j = 0; j != 9; j++){
                buttonArray[j] = new JButton("-");
                    buttonArray[j].addActionListener(new ButtonListener());
                panelArray[i].add(buttonArray[j]);
                }
            }

        for (int i = 0; i != 9; i++){
            gameBoardFrame.add(panelArray[i]);
    }    
        gameStatePanel.add(new JLabel("Current Turn's Player"));
        gameStatePanel.add(new JLabel("Current Grid"));
        gameStatePanel.add(new JLabel("Game Start"));

        gameBoardFrame.add(new JLabel("X: " + playerXName));
    gameBoardFrame.add(gameStatePanel);
        gameBoardFrame.add(new JLabel("O: " + playerOName));
    }
    private class ButtonListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println(e.getSource());
        }
    }
  public static void main(String[] args){
    String firstPlayerName = JOptionPane.showInputDialog("Enter the name of the first player: ");
    String secondPlayerName = JOptionPane.showInputDialog("Enter the name of the second player: ");

    GameBoardDisplayTest gridDisplay = new GameBoardDisplayTest(firstPlayerName,secondPlayerName);
}
}

您可以在actionPerformed中再次循环。

int buttonLocation;
public void actionPerformed(ActionEvent e){
    for (int i = 0; i < buttonArray.length; i++){
        if (e.getSource() == buttonArray[i])
            buttonLocation = i;
            break;
    }
}

我有点困惑,你怎么认为你有81个按钮。您的数组只有9个按钮。所以我的答案可能不完全适合你们的情况,但这是解决你们问题的一种方法。建议,您可能想要一个JButtons的2D阵列,因为它更有意义,为井字游戏板获取网格索引

最新更新