如何刷新Java的图像图标按钮

有谁知道如何刷新按钮图像图标?

问题是:

我正在制作一个跳棋游戏,并创建一个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();

点赞