将JPanel更改为另一个JPanel不会重新绘制更改

ved*_*ran 1 java swing jpanel jframe

我target在MainFraim中有一个主JPanel ,另一个currentViewJPanel添加到target面板中.target面板包含带有侦听器的按钮.然后假设这些听众改变了curretView面板的内容,如下所示:

private JPanel currentPanel;

public void setView(String type) {

    if (type.equals("overall")) {
        this.currentPanel = getOverallView();
        frame.setTitle("BookingCalendar - Overall View");
        frame.validate();
    } else if (type.equals("guest")) {
        this.currentPanel = getGuestView();
        frame.setTitle("BookingCalendar - Room View");
        frame.validate();
    } else if (type.equals("room")) {
        currentPanel.removeAll();
        this.currentPanel = getRoomView();
        frame.setTitle("BookingCalendar - Guest View");
        frame.validate();
    }
}
Run Code Online (Sandbox Code Playgroud)

我调用的每个方法每次调用时都会返回新的JPanel:

JPanel currentPanel = new JPanel(new MigLayout("","20 [grow, fill] 10 [grow, fill] 20", "20 [] 10 [] 20"))
Run Code Online (Sandbox Code Playgroud)

问题是,每当我调用这些方法时,面板都不会改变.它总是保持不变(默认:getOverallView())

我尝试过无效,验证,重绘两个框架以及面板,但没有发生任何变化.有人可以详细说明我需要做什么才能完全改变面板的内容currentView

Rev*_*nzo 5

你不应该每次都创建一个新的JPanel().而是为每种类型的视图创建一个,并使用CardLayout在它们之间切换.CardLayout让你可以像卡一样切换出JPanel.