Недавно я спросил здесь , как добавить новую JPanel в JFrame . Ответ помог мне получить рабочий код. Но не у меня есть связанный вопрос: «Как я могу удалить старую 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();
}
});
}
};