【问题标题】:Swapping out the center JPanel in a BorderLayout在 BorderLayout 中交换中心 JPanel
【发布时间】:2011-02-12 06:10:38
【问题描述】:

我有一个 JPanel 位于 JFrame 的 BorderLayout 的中心位置。如何将当前的 JPanel 换成新的?

【问题讨论】:

    标签: java user-interface swing jframe jpanel


    【解决方案1】:

    你有没有尝试过:

    void swapCenterPanel(JFrame frame, JPanel oldPanel, JPanel newPanel) {
        frame.getContentPane().remove(oldPanel);
        frame.getContentPane().add(newPanel, BorderLayout.CENTER); 
    }
    

    【讨论】:

    • 您还需要在此建议中添加 revalidate() 或 validate()。
    【解决方案2】:

    使用Card Layout 为您管理。

    【讨论】:

      【解决方案3】:

      只需将组件添加到中心并 revalidate() 父容器

      container.add(BorderLayout.CENTER, newPanel);
      container.revalidate();
      

      【讨论】:

      • 顺便说一句,container.revalidate() 实际上应该是 container.validate()。
      • -1,此解决方案不起作用。它似乎工作,但尝试调整框架的大小,以前的面板现在将被绘制在新面板的顶部。这是因为“Z-Ordering”在 Swing 中的工作方式。正确的解决方案是给出的另外两个建议之一,具体取决于您的确切要求。
      • 建议您尝试一下 :) BorderLayout 只能在其中心有一个组件,并在您添加某些内容时替换已经存在的任何内容。
      【解决方案4】:

      通过反复试验,我得到了这个没有 z 索引问题的工作。

      让 x 调用具有 BorderLayout
      JPanel 让我们称你为当前占用BorderLayout.CenterComponent
      让我们调用 z JPanel 来替换中心位置。

         x.remove(y);
         x.add(z);
         x.repaint();
         x.revalidate();
      

      我发现如果我尝试通过 LayoutManager 本身删除现有的 JPanel,它不起作用。相反,如果您使用 JPanel 的 remove 方法,java 文档会说它会通知布局 removeLayoutComponent 方法并且似乎可以解决问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-28
        • 1970-01-01
        • 2011-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多