有人知道如何刷新按钮图像图标吗?
问题是:
我正在制作一个跳棋游戏,并创建一个 GUI。一切正常,包括 AI,除了我在移动后调用了我的 AI,导致按钮上似乎没有检查器。
- 点击按钮
- 单击有检查器的特定按钮
- 单击检查器必须去的下一个位置
- 立即呼叫 AI 采取行动。
我的按钮有棋子图片的 ImageIcons,当我点击下一个棋子需要去的地方时,JPanel 上的 JButton 不会在那一刻刷新,而是等到 AI 进行移动并完成它的移动,导致我看不到我的检查器去了哪里。
当 3-4 一个接一个调用时,我只看到 AI 所做的最终移动,但看不到我的,因为在它退出实现 actionListener 后一切都会刷新。
我试着打电话:repaint(); 重新验证();无效();在包含按钮的 JPanel 上。
在第 4 步之前,用户可以看到他/她在 AI 移动之前放置了什么。
else
{
//This is where the code starts
if ("White".equals(Red_Or_White.getText()))
{
//Meaning that it is white's turn, then
playerPlaysAMove(x, y, goingToGo_x, goingToGo_y);
}
if ("AI".equals(AI_Enabled.getText()))
{
//AI is enabled
AIMoves(board, "Red");
//the AI needs to play the position as if the AI was a red player,
//because the player must be white
}
}
两个AI在同一回合玩,但是AI计算大约需要1分钟,此时玩家的动作直到AI播放才可见,因为它在退出actionListener后更新所有按钮(在else语句之后) .
Board 是放置在 JPanel 上的一组 8x8 按钮
static void playerPlaysAMove(int save_x, int save_y, int moveTo_x, int moveTo_y)
{
if(save_x - moveTo_x == 1 || save_x - moveTo_x == -1)
{
board[moveTo_x][moveTo_y].setIcon(board[save_x][save_y].getIcon());
board[save_x][save_y].setIcon(null);
}
else if (save_x - moveTo_x == 2 && save_y - moveTo_y == 2)
{
board[save_x-1][save_y-1].setIcon(null);
board[moveTo_x][moveTo_y].setIcon(board[save_x][save_y].getIcon());
board[save_x][save_y].setIcon(null);
}
else if (save_x - moveTo_x == 2 && save_y - moveTo_y == -2)
{
board[save_x-1][save_y+1].setIcon(null);
board[moveTo_x][moveTo_y].setIcon(board[save_x][save_y].getIcon());
board[save_x][save_y].setIcon(null);
}
else if (save_x - moveTo_x == -2 && save_y - moveTo_y == 2)
{
board[save_x+1][save_y-1].setIcon(null);
board[moveTo_x][moveTo_y].setIcon(board[save_x][save_y].getIcon());
board[save_x][save_y].setIcon(null);
}
else if (save_x - moveTo_x == -2 && save_y - moveTo_y == -2)
{
board[save_x+1][save_y+1].setIcon(null);
board[moveTo_x][moveTo_y].setIcon(board[save_x][save_y].getIcon());
board[save_x][save_y].setIcon(null);
}
}
基本上是我计算了用户选择按钮和用户目标按钮的XY坐标。有一些检查他是否正在下正确的动作,但这是主要的动作部分。
如果 XY 坐标差为 1,则表示玩家在移动,而不是跳跃,如果 XY 坐标差为 2,则表示玩家在跳跃。我还需要将原始XY坐标的按钮设置为null,即图标消失,然后将新的imageIcon放置在目标XY坐标处。
如果玩家正在跳跃,那么我还需要计算用户吃块的位置,并将 imageIcon 也设置为 null。
AI 做的事情完全相同,只是 AI 通过使用递归函数计算 XY 坐标来计算最佳移动。
主要的问题是玩家播放,然后AI计算,然后播放,然后在处理之后,它会一起显示两者的结果。是否可以让它在 AI 计算和播放之前重绘图像图标?这样玩家就可以看到自己玩了什么,然后AI玩了什么