首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为Java刷新按钮图像图标

如何为Java刷新按钮图像图标
EN

Stack Overflow用户
提问于 2012-05-08 04:28:58
回答 1查看 1.6K关注 0票数 4

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

问题是:

我正在制作一个棋盘游戏,并创建一个GUI。所有的工作,包括人工智能,除了我调用我的人工智能后,我放置一个移动,结果按钮似乎没有检查它。

  1. 点击按钮
  2. ,点击一个特定的按钮,其中有一个检查器
  3. ,点击下一个检查点,
  4. 立即调用AI进行移动。

我的按钮有ImageIcons的棋盘图片,当我点击跳棋需要去的下一个地方时,JPanel上的JButton不会在那一刻刷新,而是等待AI移动并完成它的移动,这样我就看不到我的跳棋去了哪里。

当3-4一个接一个调用时,我只看到AI所做的移动,但没有看到我的移动,因为在它退出实现actionListener之后,所有的东西都会刷新。

我试着在包含按钮的JPanel上调用: repaint();revalidate();revalidate()。

在步骤4之前,这样用户就可以看到他/她在AI进行移动之前所放置的内容。

代码语言:javascript
运行
复制
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后更新了所有按钮(在after语句之后)。

板是放置在JPanel上的由8x8个按钮组成的数组。

代码语言:javascript
运行
复制
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坐标。有一些检查他是否正确的动作,但这是主要的动作部分。

如果X坐标差是1,这意味着玩家在移动,而不是跳跃,如果X坐标差是2,那就意味着玩家正在跳跃。我还需要将原始X坐标的按钮设置为null,这意味着图标消失,然后将新的imageIcon放置在目标X坐标上。

如果玩家正在跳跃,那么我还需要计算用户吃东西的位置,并将imageIcon设置为null。

AI做同样的事情,除了AI通过使用递归函数来计算最佳移动来计算by坐标。

主要的问题是玩家,然后AI计算,然后发挥,然后经过这个过程,它将显示两者的结果在一起。在AI计算和播放之前,它能让它重新绘制图像图标吗?这样玩家就可以看到他玩了什么,然后AI玩了什么

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-14 07:56:35

尝试使用board[save_x][save_y].repaint();

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10492552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档