有谁知道如何刷新按钮图像图标?
问题是:
我正在制作一个跳棋游戏,并创建一个GUI.一切都有效,包括AI,除了我在移动后调用我的AI,导致按钮似乎没有检查器.
>单击按钮
>单击有检查器的特定按钮
>点击检查员必须去的下一个地方
>立即致电AI以采取行动.
我的按钮有Checkers图片的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
}
}
AI在同一轮中播放,但AI计算大约需要1分钟,此时,玩家的移动在AI播放之前是不可见的,因为它在退出actionListener之后更新了所有按钮(在else语句之后) .
Board是一个8×8按钮的数组,放在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设置为null.
AI完全相同,除了AI通过使用递归函数计算最佳移动来计算X Y坐标.
主要问题是玩家玩家,然后AI计算和播放,然后在过程之后,它将显示两者的结果.在AI计算和播放之前,是否可以让它重绘图像图标?这样玩家就可以看到他演奏的内容,然后是AI播放的内容
最佳答案 尝试使用[save_x] [save_y] .repaint();