我正在尝试用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);
}
}
使用JButton的setActionCommand方法将按钮[0][0]中的操作命令设置为“00”,并将按钮[2][1]中的命令设置为“21”。这会让你很容易从行动中得到正确的位置。此外,你需要三个状态,而不仅仅是两个。如果你不确定我在说什么,玩一个井字游戏,大约在中途写下数组。
假设JButton索引镜像了int数组,您可以在按钮数组中搜索正在按下的JButton(e.getSource()
inactionPerform
),但是您必须将按钮数组作为类的实例变量,以便您可以从其他方法中使用它,特别是。actionPerform()
。一旦找到索引,只需在int数组中更新它的相应值。
您可以创建自己的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倍的数组。我的代码的问题是,当我试图运行它时,编译器说变量尚未初始化。我假设做一个重载方法更好,但我不确定如何做。