有人知道如何刷新按钮图像图标吗?
问题是:
我正在制作一个棋盘游戏,并创建一个GUI。所有的工作,包括人工智能,除了我调用我的人工智能后,我放置一个移动,结果按钮似乎没有检查它。
我的按钮有ImageIcons的棋盘图片,当我点击跳棋需要去的下一个地方时,JPanel上的JButton不会在那一刻刷新,而是等待AI移动并完成它的移动,这样我就看不到我的跳棋去了哪里。
当3-4一个接一个调用时,我只看到AI所做的移动,但没有看到我的移动,因为在它退出实现actionListener之后,所有的东西都会刷新。
我试着在包含按钮的JPanel上调用: repaint();revalidate();revalidate()。
在步骤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后更新了所有按钮(在after语句之后)。
板是放置在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);
}
}
基本上,我计算了用户选择按钮和用户目标按钮的X坐标。有一些检查他是否正确的动作,但这是主要的动作部分。
如果X坐标差是1,这意味着玩家在移动,而不是跳跃,如果X坐标差是2,那就意味着玩家正在跳跃。我还需要将原始X坐标的按钮设置为null,这意味着图标消失,然后将新的imageIcon放置在目标X坐标上。
如果玩家正在跳跃,那么我还需要计算用户吃东西的位置,并将imageIcon设置为null。
AI做同样的事情,除了AI通过使用递归函数来计算最佳移动来计算by坐标。
主要的问题是玩家,然后AI计算,然后发挥,然后经过这个过程,它将显示两者的结果在一起。在AI计算和播放之前,它能让它重新绘制图像图标吗?这样玩家就可以看到他玩了什么,然后AI玩了什么
发布于 2012-05-14 07:56:35
尝试使用board[save_x][save_y].repaint();
https://stackoverflow.com/questions/10492552
复制相似问题