当前位置: 首页 > 知识库问答 >
问题:

如何从面板内切换JFrame中的JPanel?

越安翔
2023-03-14

所以,我试图为一个简单的游戏制作一个基本的功能菜单。我试图通过创建2个JPanels来做到这一点,一个用于实际游戏,另一个用于我的菜单。

我要做的是在我的菜单面板上有一个按钮,当按下这个按钮时,将显示在父JFrame中的JPanel从菜单切换到实际游戏的JPanel。

这是我的密码:

class Menu extends JPanel
{
   public Menu()
   {
      JButton startButton = new JButton("Start!");
      startButton.addActionListener(new Listener());
      add(startButton);
   }

   private class Listener implements ActionListener
   {
      public void actionPerformed(ActionEvent e)
      {     
         Container container = getParent();
         Container previous = container;
         System.out.println(getParent());
         while (container != null)
         {
            previous = container;
            container = container.getParent();
         }
         previous.setContentPane(new GamePanel());      
      }
   }
}

如你所见,我为我的开始按钮创建了一个监听器。在侦听器内部,我使用了一个time循环,通过getP的()方法到达JFrame。程序正在获取JFrame对象,但是它不允许我调用setContentPane方法...

有没有人知道如何让它工作,或者有更好的方法在菜单和游戏之间来回切换?

共有1个答案

宦瀚
2023-03-14

像这样:

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class CardLayoutDemo extends JFrame {

    public final String YELLOW_PAGE = "yellow page";
    public final String RED_PAGE = "red page";
    private final CardLayout cLayout;
    private final JPanel mainPane;
    boolean isRedPaneVisible;

    public CardLayoutDemo(){

        setTitle("Card Layout Demo");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);

        mainPane = new JPanel();
        mainPane.setPreferredSize(new Dimension(250,150));
        cLayout = new CardLayout();
        mainPane.setLayout(cLayout);

        JPanel yellowPane = new JPanel();
        yellowPane.setBackground(Color.YELLOW);
        JPanel redPane = new JPanel();
        redPane.setBackground(Color.RED);

        mainPane.add(YELLOW_PAGE, yellowPane);
        mainPane.add(RED_PAGE, redPane);
        showRedPane();

        JButton button = new JButton("Switch Panes");
        button.addActionListener(e -> switchPanes() );

        setLayout(new BorderLayout());
        add(mainPane,BorderLayout.CENTER);
        add(button,BorderLayout.SOUTH);
        pack();
        setVisible(true);
    }

    void switchPanes() {
        if (isRedPaneVisible) {showYelloPane();}
        else { showRedPane();}
    }

    void showRedPane() {
        cLayout.show(mainPane, RED_PAGE);
        isRedPaneVisible = true;
    }

    void showYelloPane() {
        cLayout.show(mainPane, YELLOW_PAGE);
        isRedPaneVisible = false;
    }

    public static void main(String[] args) {
        new CardLayoutDemo();
    }
}
 类似资料:
  • 我正在尝试构建一个基于按钮的动态应用程序,这些按钮从创建的面板内部切换JFrame的主面板(这是我的应用程序的顶部内容)。 这个问题更多的是设计问题,而不是开发问题。我不确定我的设计,但我会试着解释一下。 我有一个JFrame代表我的应用程序,其中包含一个JTabbedPane(和多个Tabs)。每个选项卡都包含一个默认的JPanel,在那个JPanel中,我调用一个正在呈现我的视图的控制器(我正

  • 相当绿色关于javas组件的东西等,所以请原谅我,如果我提供的信息是不够的! 请参阅以下代码。在框架中添加菜单和菜单显示,没有问题。我想知道何时调用gameOn()来删除菜单,而不是启动游戏。下面的代码仅使框架表面为“空白”,未添加游戏面板。 对如何修复它有何想法/建议?菜单面板上有一个鼠标听筒。

  • 我正在写一个俄罗斯方块游戏。当应用程序启动Jlabel时,打开按钮“Play”。如何在现有的JFrame中切换到不同的标签(板)?

  • 问题内容: 我有2个JPanels和1个JFrame,当我单击一个按钮时,我试图在面板之间切换。我不想使用CardLayout,因为我想要不同的面板,并且对于CardLayouts我只能为两个面板使用相同的按钮。我的代码是: } 问题答案: 这是一个帮助您的小例子: 最新编辑 显示您的选择,内部

  • 问题内容: 我用这段代码通过按钮浏览了panel1和panel2。 (button1和button2),但是当我运行代码时,框架保持空白。 有人可以向我解释我做错了什么以及如何完成 以这种方式在panel1和panel2之间切换?首先从panel1开始 码: 提前致谢 问题答案: 使用布局管理器。 frame.setLayout(new FlowLayout());

  • 我想做一个现代的图形用户界面,左边有标签,如图所示: 有什么想法,我如何让面板在不处理写入/设置的数据的情况下进行切换,例如进入文本字段、文本区域、复选框、滚动条等? 我本来想删除旧的一个面板,并添加另一个面板,但当我点击面板之前,我访问的控制数据将被重置,我认为它会闪烁。