gpt4 book ai didi

java - 为什么 setText 不更新 JLabel?

转载 作者:行者123 更新时间:2023-12-01 06:35:24 25 4
gpt4 key购买 nike

我已经检查了这里的其他线程,但没有找到解决方案。

1) JFrame 为 setVisible(true)。

2) 这是什么意思:“我想知道您的问题是否是并发问题,您正在 Swing 事件线程上执行长时间运行的进程,这会阻止您的标签更新其文本。”我在其他地方读到过。

3) 我没有多次初始化包含标签的 JPanel。

编辑:4) updateTurn 从包含 TrackingPanel(即 gamePanel)的 JPanel 中调用。我调用方法 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());
}

关于java - 为什么 setText 不更新 JLabel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17536390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com