我在MainFraim中有一个主要的JPanel target
和另一个currentView
JPanel,它被添加到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();
}
}
我调用的每个方法每次调用时都会返回新的JPanel:
JPanel currentPanel = new JPanel(new MigLayout("","20 [grow, fill] 10 [grow, fill] 20", "20 [] 10 [] 20"))
问题是,每当我调用这些方法时,面板都不会改变。它始终保持不变(默认情况下:getOverallView()
)
我尝试过无效,验证,重绘两个框架以及面板,但不会发生任何变化。有人可以详细说明我需要做些什么才能彻底改变小组的内容currentView
答案 0 :(得分:5)
您不应每次都创建新的JPanel()。而是为每种类型的视图创建一个,并使用CardLayout在它们之间切换。 CardLayout让你可以像卡一样切换出JPanel。
答案 1 :(得分:1)
看起来你只是试图移动指针,使currentView
指向另一个面板。您实际需要做的是从currentView
中删除target
,然后添加新面板。
如果这是你的2个小组...
JPanel target = new JPanel();
JPanel currentView = new JPanel();
并将currentView
添加到target
,就像这样......
target.add(currentView);
然后要更改面板,您需要从target
中删除现有面板,然后添加新面板......
target.remove(currentPanel);
currentPanel = new JPanel();
target.add(currentPanel);
答案 2 :(得分:1)
此外,如果您不想使用CardLayout,您可以像往常一样使JPanel成为新的JPanel,只需调用revalidate()。