gpt4 book ai didi

java - GUI 未动态更新

转载 作者:行者123 更新时间:2023-12-02 04:40:30 25 4
gpt4 key购买 nike

我目前正在尝试创建一个程序,在按下 JTextArea 和 JButton 时动态更改它们上的文本,或者显示 JOptionPane。目前,当我按下按钮时没有任何反应,它们没有更新,也没有出现对话框。

感谢帮助 私有(private) MillionaireGui View ; 私有(private)百万富翁模型; 私有(private)字符串问题; 私有(private) int 游戏状态; 私有(private) boolean 值 isRunning;

public MillionaireController(MillionaireGui view, Millionaire model) {
this.view = view;
this.model = model;
this.question = null;
this.gameState = 0;
this.isRunning = true;
}

public void setModel(Millionaire model) {
this.model = model;
}

public void setView(MillionaireGui gui) {
this.view = gui;
}

public void getQuestion() {
question = model.getDeck().generateQuestion();
view.setQuestion(question);
}
public void update(){
while(isRunning){

if(gameState == 0){

getQuestion();

ArrayList<String> ans = model.getDeck().getAnswers();
view.setButtonA(ans.get(0));
view.setButtonB(ans.get(1));
view.setButtonC(ans.get(2));
view.setButtonD(ans.get(3));
gameState = 1;

}

if(gameState == 1){

if(view.getAnswer() != 0){
if(model.getDeck().isCorrect(view.getAnswer())){
view.dispCorrectAnswer();
view.setAnswer(0);
gameState = 0;
}
else {
gameState = 3;
}
}

}
if(gameState == 3){
isRunning = false;
view.displayErrorMsg();
}
}
}
@Override
public void run() {
update();
}

图形用户界面:

public void setButtonB(String str){
buttonB.setText(str);
}

public void setButtonC(String str){
buttonC.setText(str);
}

public void setButtonD(String str){
buttonD.setText(str);
}

public void setAnswer(int num){
answer = num;
}

public String getQuestion(){
return question;

}

public void setQuestion(String str){
question = str;
questionField.setText(str);
}

主要:

public class Millionaire_main {

public Millionaire_main(){

}

public static void main(String[] args) {
MillionaireGui gui = new MillionaireGui();
QuestionDeck deck = new QuestionDeck();
Millionaire model = new Millionaire(deck);
MillionaireController control = new MillionaireController(gui, model);
gui.setVisible(true);

Thread thread = new Thread(control);
thread.start();
}
}

最佳答案

update() 方法中的代码似乎正在使用线程运行。我认为发生的情况是您有 2 个线程,其中一个正在执行一些导致更新的后台任务。后台线程不是 EDT,因此任何 UI 更新都将不可见。

尝试下面的方法可以解决问题(至少很可能)

SwingUtilities.invokeLater(new Runnable() 
{
@Override
public void run() {
view.setButtonA(ans.get(0));
view.setButtonB(ans.get(1));
view.setButtonC(ans.get(2));
view.setButtonD(ans.get(3));
}
});

上面应该将按钮设置事件放在 EDT 上,这应该会触发更改。

关于java - GUI 未动态更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30239161/

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