java - 将 JFrame 中的现有 JPanel 替换为另一个 JPanel 的正确方法是什么?

标签 java swing jframe jpanel

我正在构建一个程序,需要将当前可见的 JPanel 替换为另一个。不幸的是,似乎有很多方法可以解决这个问题,而我的所有尝试都以失败告终。我可以成功地让第一个 JPanel 出现在我的 JFrame 中,但是交换 JPanel 会导致出现空白 JFrame。

我的主 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 本身工作得很好,但尝试将它与我的程序结合使用只会产生一个空白窗口。任何帮助将不胜感激!

最佳答案

需要将当前可见的 JPanel 替换为另一个

看看CardLayout有关如何正确执行此操作的完整示例。

关于java - 将 JFrame 中的现有 JPanel 替换为另一个 JPanel 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23315416/

相关文章:

java - 加载面板时聚焦于组件

java - 在 IntelliJ 中构建 Flex/Java 应用程序 - HTML 包装器未正确编写

java - try/catch 捕获异常后继续执行循环

java - 可以禁用 swing 中的进度条吗?

java - java中如何将一个ComboBox中所选项目的相关数据获取到另一个ComboBox

java - 从 Tic Tac Toe 中获得获胜者

java - JFrame 上的计数器

从一个窗口切换到另一个窗口时出现 javafx.fxml.LoadException

java - 需要带有建议和切入点的@Transactional

java - 如何获取从 JOptionPane.showMessageDialog 中选择的选项的值?