更改内容窗格 框架 单击按钮后

  • 本文关键字:框架 单击 按钮 java swing
  • 更新时间 :
  • 英文 :


我希望能够在单击JFrame的JPaels中的一个按钮后设置该框架的内容窗格。

我的架构由一个控制器组成,该控制器创建JFrame和其中的第一个JPanel。在第一个 JPanel 中,我调用了一个方法:控制器上的 setcontentpane(JPanel jpanel)。但是,它不是加载传递的 JPanel,而是删除所有面板(请参阅下面的代码)

第一个 JPanel 中的 ActionListener

public void actionPerformed(ActionEvent arg0) {
            controller.setpanel(new CustomPanel(string1, string2));
        }

控制器:

JFrame frame;
public void setpanel(JPanel panel)
{
    frame.getContentPane().removeAll();
    frame.getContentPane().add(panel);
    frame.repaint();
}
public Controller(JFrame frame)
{
    this.frame=frame;
}

谁能告诉我我做错了什么?谢谢:)

调用重新验证,然后重新绘制。这告诉布局管理器对组件进行布局:

JPanel contentPane = (JPanel) frame.getContentPane();
contentPane.removeAll();
contentPane.add(panel);
contentPane.revalidate(); 
contentPane.repaint();

如果你只想交换JPanells,更好的是使用CardLayout并让它做肮脏的工作。

我找到了一种方法来做我上面概述的事情。

像这样实现 setpanel 方法:

public void setpanel(JPanel panel)
{
    frame.setContentPane(panel);
    frame.validate();
}

在我的情况下做到了。

确定我仍然需要修复代码中的某些内容,因为 pack() 仍然会缩小窗口,但至少上面发布的方法有效。

每当更改帧的包含层次结构时,都必须调用 pack()

从文档中:

使此窗口的大小适合 其首选大小和布局 子组件。[...]窗口将 在首选大小之后进行验证 被计算出来。

最新更新