当前位置: 首页 > 知识库问答 >
问题:

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

贝滨海
2023-03-14

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

问题是:

我正在做一个跳棋游戏,并创建一个GUI。一切正常,包括人工智能,除了我调用我的AI后,我放置了一个移动,结果按钮上没有检查。

  1. 单击按钮
  2. 单击带有检查器的特定按钮
  3. 单击检查器必须去的下一个点
  4. 立即呼叫AI以采取行动。

我的按钮上有图像图标,当我点击到下一个点,检查器需要去的地方时,JPanel上的JButton不会在那一刻刷新,而是等待AI移动并完成它的移动,结果我看不到我的检查器去了哪里。

当3-4个调用一个接一个时,我只看到AI所做的结果移动,而不是我的,因为所有的东西在退出implements ActionListener后都会刷新。

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

以便用户可以看到他/她在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坐标。有一些检查他是否正在发挥正确的动作或不,但这是主要的动作部分。

如果X Y坐标差为1,则表示玩家在移动,而不是在跳跃;如果X Y坐标差为2,则表示玩家在跳跃。我还需要设置原始xy坐标的按钮为空,这意味着图标消失,然后将新的imageIcon放在目标xy坐标。

如果播放器是跳跃的,那么我还需要计算用户吃掉那块的地方,并将imageIcon也设置为null。

人工智能做了完全相同的事情,只是人工智能通过使用递归函数来计算x-y坐标来计算最佳移动。

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

共有1个答案

刘和玉
2023-03-14

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

 类似资料:
  • 问题内容: 我想将图像用作Java中的按钮,而我尝试这样做: 但这仍然显示图像后面的实际按钮,我只想将图像用作按钮,我该怎么做? 问题答案: 像这样删除边框: 然后还有内容1: 1:来自@ 3sdmx添加到问题中的解决方案

  • 快速提问,如何在fxml中让图像覆盖整个按钮。 因此,按钮的所有可见部分都是边框。由于某种原因,当我试图调整图像大小以适应按钮时,它会自动调整大小。我在使用场景生成器。我正在使用FXML。 按钮大小为prefHeight=“38.0”prefWidth=“50.9990000002526”。 记住我不想看到按钮的背景。我希望它被一张图片覆盖。 谢谢,你们帮了大忙。

  • 我刚刚在文件夹下添加了一个新的可绘制文件夹。在drawable文件夹中,我复制了ic\U启动器。png文件来自可绘制hdpi文件夹。当我按下按钮时,我想通过新的图像更改标准的图像按钮。我写了一些代码,但当我启动应用程序时,它崩溃了。 编辑:我改成了这个,这个也不行。 编辑2:这很有效。感谢大家。

  • 问题内容: 我期望以下两个脚本具有相同的输出。 但是执行 脚本1 时,按钮上没有显示图像。但是, 脚本2 效果很好。 脚本1 剧本2 问题答案: 对图像对象的唯一引用是局部变量。当退出时,被当作垃圾回收的局部变量,因此图像被破坏。在第二个示例中,由于映像是在全局级别创建的,因此它永远不会超出范围,因此也不会进行垃圾回收。 要解决此问题,请保存对图像的引用。例如,代替use 。

  • 我是全新的,我唯一的编程经验是PLC; s和HMI的,所以我很抱歉不能弄清楚什么可能是一个简单的任务。但是我找不到任何CURRENT视频或工作示例,说明如何简单地将图像放置在主活动上,并在按下后打开另一个活动。我正在使用最新版本的Android Studio11.0,并试图学习静态编程语言。我已经附上了我到目前为止的项目代码,正如你所看到的,我刚刚开始这个项目。提前感谢您的任何帮助。 Java文件

  • 主要内容:本节引言:,1.StateListDrawable简介:,2.实现按钮的按下效果:,3.使用颜色值绘制圆角按钮,4.实现Material Design水波效果的Button,本节小结:本节引言: 今天给大家介绍的Android基本控件中的两个按钮控件,Button普通按钮和ImageButton图像按钮; 其实ImageButton和Button的用法基本类似,至于与图片相关的则和后面ImageView相同,所以本节 只对Button进行讲解,另外Button是TextView的子类,