最近我在这里询问 如何向JFrame添加新的JPanel。答案帮助我得到了可工作的代码。但现在我有一个相关问题:“如何删除旧的JPanel”。我需要这样做是因为以下问题。
当我想要时(超出时间限制或用户按下“提交”按钮),会出现一个新的JPanel。但几秒钟后,旧JPanel的某个元素会与新JPanel的组件一起出现。我不明白为什么会这样。
我认为这是因为我有其他更新窗口的线程。但第一个线程只添加旧面板一次(所以它应该完成)。而在第二个线程中,我有一个被打断的循环(所以它也应该完成)。
这是我的代码:
private Thread controller = new Thread() {
public void run() {
// First we set the initial pane (for the selection of partner).
SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame.getContentPane().add(generatePartnerSelectionPanel());
frame.invalidate();
frame.validate();
}
});
// Update the pane for the selection of the parnter.
for (int i=40; i>0; i=i-1) {
final int sec = i;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
timeLeftLabel.setText(sec + " seconds left.");
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) { }
if (partnerSubmitted) {
break;
}
}
// For the given user the selection phase is finished (either the time is over or form was submitted).
SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame.getContentPane().add(generateWaitForGamePanel());
frame.invalidate();
frame.validate();
}
});
}
};