当前位置: 首页 > 知识库问答 >
问题:

JButton数组到int数组

海信鸥
2023-03-14

我正在尝试用java swing制作一个Tic-Tac-Toe程序,我已经制作了框架。如何让JButton数组中的按钮激活int数组?我希望int数组保存Tic-Tac-Toe网格中点的值,因此当按下按钮时,int数组中的对应点将是0或1,按钮的文本将更改为X或O。

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class TicTacToeGui extends javax.swing.JFrame implements ActionListener
{

    int[][] grid = new int[3][3];
    public final static int r = 3;
    public final static int c = 3;
    public final static int X = 0;
    public final static int O = 1;

    TicTacToeGui()
    {
        this.setTitle("Tic Tac Toe");
        JButton[][] button = new JButton[3][3];
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(r, c));
        for(int i = 0; i < r; i++)
        {
            for(int j = 0; j < c; j++)
            {
                button[i][j] = new JButton("");
                button[i][j].addActionListener(this);
                panel.add(button[i][j]);
            }

        }
        this.add(panel);
        this.setSize(400, 400);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public void actionPerformed(ActionEvent e){
        if(e.getSource() instanceof JButton){

        }
    }
    public static void main(String [] args)
    {
        new TicTacToeGui().setVisible(true);
    }

}

共有3个答案

商琛
2023-03-14

使用JButton的setActionCommand方法将按钮[0][0]中的操作命令设置为“00”,并将按钮[2][1]中的命令设置为“21”。这会让你很容易从行动中得到正确的位置。此外,你需要三个状态,而不仅仅是两个。如果你不确定我在说什么,玩一个井字游戏,大约在中途写下数组。

关志
2023-03-14

假设JButton索引镜像了int数组,您可以在按钮数组中搜索正在按下的JButton(e.getSource()inactionPerform),但是您必须将按钮数组作为类的实例变量,以便您可以从其他方法中使用它,特别是。actionPerform()。一旦找到索引,只需在int数组中更新它的相应值。

白阳煦
2023-03-14

您可以创建自己的JButton实现,并向提供索引值。我们可以从ActionListener中提取它

public void actionPerformed(ActionEvent e){
    if(e.getSource() instanceof MySuperButton){

        MySuperButton btn = (MySuperButton)e.getSource();
        int[] index = btn.getIndex();
        // or
        int row = btn.getRow();
        int col = btn.getColumn();

    }
}

然后当您设置它时,您可以:

for(int i = 0; i < r; i++)
{
    for(int j = 0; j < c; j++)
    {
        button[i][j] = new MySuperButton(i, j); // Store the row/column
        button[i][j].addActionListener(this);
        panel.add(button[i][j]);
    }

}

这还允许您在内部存储按钮的状态。。。

您可能还想看看JToggleButton

 类似资料:
  • 问题内容: 我正在尝试将字符串转换为整数数组,以便随后可以对它们执行数学运算。我在以下代码方面遇到麻烦: 这给了我一个“无法转换的类型”错误,要求:int []发现:char我还尝试了其他一些方法,例如Character.getNumericValue,并且直接对其进行了直接分配,而没有进行任何修改。在那种情况下,无论我使用哪种转换方法或(!)字符串的实际值是什么,它总是输出相同的垃圾“ [I @

  • 我正在尝试将我的对象[]数组映射并过滤到int[]数组。如果对象是int,效果很好,但如果不是int,则抛出强制转换异常。我想知道我是否可以在lambda表达式中附加一个try/catch?这是我的代码: 或者更好的方法是试着抓住整个街区?

  • 我正在写一个简单的井字游戏,需要在轮到他们的时候接受用户输入。玩家应该简单地提供一组坐标来放置他们的令牌(1,1)到(3,3)。我应该能够接受输入为“2 1”或“2,1”或“2,1”。所以我需要能够获取他们的字符串输入并提取两个数字中的每一个,而不管分隔符如何,并使用它们将他们的令牌分配给3x3数组中的指定单元格。 主要的问题是只能利用我们已经学过的东西(这是Java的第一节)。这是构建Java程

  • 之间有区别吗 和 ? 两者都起作用,结果完全相同。哪一个更快或更好?有推荐的款式指南吗?

  • 问题内容: 好的,所以我试图从我用来学习Java的书中进行练习。这是我到目前为止的代码: 以下是确切措词的练习: 修改类Calculator.java,以将所有数字按钮保留在声明为10个元素的数组中,如下所示: 替换从10开始的行 带有创建按钮并将其存储在此数组中的循环。 好的,所以我尝试使用声明数组,但这给了我错误: 这行有多个标记- 按钮无法解析为类型- 按钮无法解析为类型 相反,我尝试了这个

  • 我正在尝试制作一个程序,要求使用min和max以及数组的长度,根据用户输入的max和min(int或double),它将创建一个int或do倍的数组。我的代码的问题是,当我试图运行它时,编译器说变量尚未初始化。我假设做一个重载方法更好,但我不确定如何做。