我在这里检查了其他线程,但没有找到解决方案。
1)JFrame是setVisible(true)。
2)这意味着什么:“我想知道您的问题是否是并发问题,您正在Swing事件线程上运行一个长时间运行的进程,并且这阻止了标签更新其文本。”我在其他地方读过。
3)我没有多次初始化包含标签的JPanel。
编辑:
4)从包含TrackingPanel
(即gamePanel
)的JPanel调用updateTurn。我调用方法changeTurns();
,这是该代码:
public void changeTurns() {
if(turnPlayer == playerX)
turnPlayer = playerO;
else
turnPlayer = playerX;
trackingPanel.updateTurn();
}
这是完整的相关代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class TrackingPanel extends JPanel{
/*TURN STUFF*/
private JPanel turnPanel; //turns panel to keep track of whose turn it is
private JLabel turnLabel;
private String turn;
/*OTHER*/
private GamePanel gamePanel;
public TrackingPanel( GamePanel gamePan ) {
setLayout( new GridLayout(1,4) );
setBorder(BorderFactory.createMatteBorder(2,2,4,2,Color.BLACK));
gamePanel = gamePan;
/*THIS PANEL DISPLAYS THE TEXT*/
turnPanel = new JPanel( new GridLayout(2,1) );
turn = gamePanel.getPlayerTurn().getLetter();
turnLabel = new JLabel(" Player " + turn + "'s turn");
add( turnPanel);
}//end constructor
/*THIS IS WHERE THINGS GO WRONG*/
public void updateTurn() {
turn = gamePanel.getPlayerTurn().getLetter();
turnLabel.setText( " Player" + turn + "'s turn" );
System.out.println(turn);
}
}
在调用
updateTurn()
之前,turnLabel
说“ PlayerX轮到”了。之后,应该说“ PlayerO轮到我了”。通过打印出turn
(我得到的是字符串'O',而不是'X'),我知道所显示的内容(“ PlayerX的转身”)不是应该显示的内容(“ PlayerO的转身”)。在此先感谢您的支持!
编辑。尝试提供SSCCE,但不知道如何包含图像文件。抱歉!
最佳答案
尝试使用此:
private void setText(final JLabel label, final String text){
label.setText(text);
label.paintImmediately(label.getVisibleRect());
}