我编写了一个使用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);
}
}
谢谢!
答案 0 :(得分:2)
您正在使事件调度程序线程等到3秒。这将停止响应,您的动作事件将不会返回,直到这次重新绘制。 检查SwingUtilities invokeLater(),您可以创建一个后台线程并让它休眠3秒钟。一旦它醒来,使用swing实用程序方法,你可以编写你的UI更新代码,以便它将由EDT执行。