java用另一个JFrame替换现有JPanel的正确方法是什么?
我正在构建一个程序,需要将当前可见的JPanel换成另一个。不幸的是,这件事似乎有很多方面要做,我所有的尝试都以失败告终。我可以成功地让第一个JPanel出现在我的JFrame中,但是交换JPanel会导致一个空白的JFrame
我的主要框架:
public class ShellFrame {
static CardLayout cl = new CardLayout(); //handles panel switching
static JFrame frame; //init swing on EDT
static MainMenu mm;
static Panel2 p2;
static Panel3 p3;
public static void main(String[] args) {
initFrame();
}
public static void initFrame() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame = new JFrame();
frame.setDefaultCloseOperation(3);
frame.setLayout(cl);
mm = new MainMenu();
pp = new PlacementPanel();
//first panel added to frame will always show first
frame.add(mm, "MainMenu");
frame.pack(); //sizes frame to fit the panel being shown
frame.setVisible(true);
}
});
}
public static void switchPanel(String name) {
cl.show(frame.getContentPane(), name);
frame.pack();
}
public static void updatePanel2(/* args */) {
frame.removeAll();
p2 = new Panel2(/* args */);
frame.add(pp, "PlacementPanel");
frame.pack();
frame.validate();
frame.repaint();
}
我试图使用updatePanel2将现有的面板替换为新的Panel2,但它似乎不起作用。Panel2本身运行良好,但尝试将其与我的程序结合使用只会产生一个空白窗口。任何帮助都将不胜感激
# 1 楼答案
that requires swapping out the current, visible JPanel with another
请看一下CardLayout以获得如何正确操作的完整示例
# 2 楼答案
我有一个Swing应用程序,当用户按下“空格”键时,它会“交换”面板,显示运行模拟的实时绘图。我所做的是这样的:
这对我的“show live plot”问题非常有效。还有
CardLayout
方法,如果你遇到困难,你可能会把它变成一个新的独立问题。祝你好运# 3 楼答案
您应该对要替换的面板执行
.setVisible(false);
下面是一个工作示例,当您按“回车”键时,它会切换面板; 如果在IDE中复制,则自动获取导入(Eclipse中的shift+o)
//+-以下是替代品: