Я создал подкласс JFrame, содержащий 9 JPanels, используя GridLayout (3x3). Я пытаюсь разработать метод, который случайным образом перестраивает JPanels внутри JFrame. Вот то, что я до сих пор:Переупорядочение 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 в макете? Заранее спасибо!
Brilliant! Спасибо! – AndreiM
Добро пожаловать, но это точно не блеск, но скорее опыт ... Я был сожжен этим раз или два в прошлом, поэтому я никогда не забуду это. :) –