gpt4 book ai didi

java - 当我使用 sleep 时,JPanel 未正确更新 CardLayout

转载 作者:行者123 更新时间:2023-12-02 07:58:59 24 4
gpt4 key购买 nike

我编写了一个使用 CardLayout 的程序。我希望它显示一个 JPanel,然后根据用户的输入显示一个新的 JPanel,暂停 3 秒,然后显示另一个需要用户输入的 JPanel。

我的 JPanel 需要用户输入工作正常,并且我所做的调试表明,当程序暂停 3 秒时,正在生成“填充”面板(见下文),但只是未正确呈现。

class sylBetween extends JPanel{

sylBetween(boolean response, String fileName){
super();
setSize(1365,725);
JLabel cross = new JLabel("+");
JLabel display;
boolean feedback = myParticipant.getFeedbackTF();
if(feedback){

String v = syllogism.getSyllValidity(fileName);
if(v.equals("V")&&response==true||v.equals("I")&&response==false){
display=new JLabel("Correct");
}
else{
display=new JLabel("Incorrect");
}

add(display);
}
else{
add(cross);
}
}
}

我认为问题出在这段代码中,但我不明白为什么:

    public void actionPerformed(ActionEvent e) {

String name = s[currentTrial].getFN();

boolean answerTF = false;
if(e.getSource()==s[currentTrial].yes){
answerTF=true;
}
else if(e.getSource()==s[currentTrial].no){
answerTF=false;
}


currentTrial++;
if(currentTrial>=s.length){
cards.show(this, "end");
}
else{
add(new sylBetween(answerTF,name), "b"+currentTrial);
this.revalidate();
cards.show(this, "b"+currentTrial);
try {
Thread.sleep(3000);
} catch (InterruptedException e1) {
System.err.println(e1);
}
cards.show(this,"Card"+currentTrial);
}

}

谢谢!

最佳答案

您正在让事件调度程序线程等待 3 秒。这将停止响应,并且您的操作事件将不会返回,直到此时进行重新绘制。检查 SwingUtilities invokeLater(),您可以创建一个后台线程并使其 hibernate 3 秒。一旦它唤醒,您可以使用 swing 实用程序方法编写 UI 更新代码,以便 EDT 执行它。

关于java - 当我使用 sleep 时,JPanel 未正确更新 CardLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9200072/

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