我使用 GridLayout (3x3) 创建了一个包含 9 个 JPanel 的 JFrame 子类。我正在尝试设计一种随机重新排列 JFrame 中的 JPanel 的方法。这是我到目前为止所拥有的:
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();
}
运行此方法后,JPanel 在 GridLayout 中的位置与之前完全相同!我已经确认 JFrame 确实正在重新绘制,我的堆栈正在重新排列,并且 removeAll()
和 add()
方法正在运行。内容 Pane 似乎记住了 JPanel 的位置,因此重新排序 add()
调用似乎不起作用。
我哪里出错了?有谁知道在布局中调整 JPanel 位置的更好方法吗?提前致谢!
最佳答案
也许您的问题是您需要在向容器添加组件后对容器调用重新验证。这告诉布局管理器做他们的事情 - 布局它们包含的组件。
((JPanel)getContentPane()).revalidate();
getContentPane().repaint();
关于java - 在 JFrame 的内容 Pane 中重新排列 JPanel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4696417/