java - 在 JFrame 的内容 Pane 中重新排列 JPanel?

标签 java swing

我使用 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/

相关文章:

java - 在 Swing 中使用线程的困难

java - Swing 中图像的形状属性

java - 在 PaintedImage Java 上绘制字符串

java - 登录后编辑/更新用户信息 [Android]

java - 无法在我的 JpaRepository 代码中使用 findOne()

Java 死代码消除……这段代码是否有被优化掉的风险?

java - 如何使方法内创建的变量可供类中的所有其他方法使用?

Java - 在 JTable 中渲染图像

java - 如何使用 iText 阅读多列 pdf?

java - 在 Java 构造函数中设置数据时出现 NullPointerException