有人知道如何刷新按钮图像图标吗?
问题是:
我正在制作一个跳棋游戏,并创建一个GUI。一切都有效,包括AI,除了我在移动后调用我的AI,导致按钮似乎没有检查器。
我的按钮有ImageIcons的跳棋图片,当我点击检查器需要去的下一个地方时,JPanel上的JButton在那一刻不刷新,但等到AI移动并完成它的移动结果我没看到我的检查员去了哪里。
当3-4一个接一个地调用时,我只看到AI所做的移动,但不是我的,因为在它退出implements actionListener之后所有内容都会刷新。
我试着打电话: 重绘(); 重新验证(); 无效(); 在包含按钮的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
}
}
人工智能在同一回合播放,但人工智能计算大约需要1分钟,此时,玩家的动作在AI播放前不可见,因为它在停止动作后更新了所有按钮。其他声明)。
Board是一个8x8按钮的数组,放在JPanel
上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);
}
}
基本上我计算了用户选择按钮的X Y坐标和用户的目标按钮。有些人会检查他是否正在进行正确的动作,但这是主要的动作部分。
如果X Y坐标差为1,则表示玩家正在移动,而不是跳跃,如果X Y坐标差为2,则表示玩家正在跳跃。我还需要将原始X Y坐标的按钮设置为null,这意味着图标消失,然后将新的imageIcon放在目标X Y坐标处。
如果玩家正在跳跃,那么我还需要计算用户吃掉该棋子的地方,并将该imageIcon设置为空。
AI完全相同,只是AI通过使用递归函数计算最佳移动来计算X Y坐标。
主要问题是玩家玩家,然后AI计算和播放,然后在过程之后,它将显示两者的结果。在AI计算和播放之前,是否可以让它重绘图像图标?这样玩家就可以看到他演奏的内容,然后是AI播放的内容
答案 0 :(得分:2)
尝试使用board[save_x][save_y].repaint();