Я создал подкласс JFrame, содержащий 9 JPanels, используя GridLayout (3x3). Я пытаюсь разработать метод, который случайным образом переставляет JPanels в JFrame. Вот что у меня есть:
public void shuffle() {
Stack<Component> panels = new Stack<Component>();
for(Component c : this.getContentPane().getComponents())
panels.push(c);
this.getContentPane().removeAll();
Collections.shuffle(panels);
while(!panels.isEmpty())
this.getContentPane().add(panels.pop());
this.repaint();
}
После запуска этого метода JPanels находятся в тех же позициях в GridLayout, что и раньше! Я подтвердил, что JFrame действительно перекрашивается, мой стек перетасовывается, и что методы removeAll()
и add()
работают. Панель содержимого, похоже, запоминает, где были JPanels, поэтому изменение порядка вызовов add()
, похоже, не работает.
Где я делаю ошибку? Кто-нибудь знает лучший способ перетасовать позиции JPanels в макете? Заранее спасибо!