Я хотел бы удалить старую JPanel из окна (JFrame) и добавить новую. Как я должен это делать?
Я попробовал следующее:
public static void showGUI() {
JFrame frame = new JFrame("Colored Trails");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(partnerSelectionPanel);
frame.setSize(600,400);
frame.setVisible(true);
}
private static void updateGUI(final int i, final JLabel label, final JPanel partnerSelectionPanel) {
SwingUtilities.invokeLater(
new Runnable() {
public void run() {
label.setText(i + " seconds left.");
}
partnerSelectionPanel.setVisible(false); \\ <------------
}
);
}
Мой код обновляет «старую» JPanel, а затем делает весь JPanel невидимым, но он не работает. Компилятор жалуется на строку, обозначенную <------------
. Это пишет: <identifier> expected, illegal start of type
.
ДОБАВЛЕНО:
Мне удалось сделать то, что мне было нужно, и я сделал это следующим образом:
public static void showGUI() {
frame = new JFrame("Colored Trails");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(partnerSelectionPanel);
//frame.add(selectionFinishedPanel);
frame.setSize(600,400);
frame.setVisible(true);
}
public static Thread counter = new Thread() {
public void run() {
for (int i=4; i>0; i=i-1) {
updateGUI(i,label);
try {Thread.sleep(1000);} catch(InterruptedException e) {};
}
partnerSelectionPanel.setVisible(false);
frame.add(selectionFinishedPanel);
}
};
Работает, но не выглядит для меня безопасным решением по следующим причинам:
- Я изменяю и добавляю элементы в JFrame из другого потока.
- Я добавляю новый JPanel в JFrame после того, как я уже «упаковал» JFrame и сделал его видимым.
Должен ли я это делать?