首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java CardLayout IllegalArgumentException

Java CardLayout IllegalArgumentException
EN

Stack Overflow用户
提问于 2015-05-17 00:51:32
回答 1查看 167关注 0票数 2

我正在制作一个使用CardLayout在四个JPanels (gamePanel、startMenu、pauseMenu和levelMenu)之间切换的游戏。我得到了例外"java.lang.IllegalArgumentException: CardLayout的错误家长“。但是,我将所有的卡片添加到面板中,它有布局管理器CardLayout,所以我不明白为什么面板不是父版。我看过CardLayout的Java教程以及涉及IllegalArgumentException的堆栈溢出问题,但我看不出我做错了什么。提前谢谢。

游戏:

代码语言:javascript
复制
import java.awt.CardLayout;

import javax.swing.JFrame;
import javax.swing.JPanel;

/** Class Contains the main method and the game's logic */
public class Game {

    /** Field The JFrame for the game */
    public JFrame frame = new JFrame();

    /** Field The JPanel that uses CardLayout to only display one JPanel at a time */
    private JPanel panel;

    /** Field The CardLayout that controls which JPanel is showing */
    private CardLayout cardLayout;

    /** Field The JPanel that displays the playing field */
    private JPanel gamePanel = new JPanel();

    /** Field The first menu the player sees */
    private JPanel startMenu = new JPanel();

    /** Field The menu the player sees when the game is paused */
    private JPanel pauseMenu = new JPanel();

    /** Field The menu that allows the player to select which level to play */
    private JPanel levelMenu = new JPanel();

    /** Constructor for Game with no parameters */
    public Game() {
        initializeGame();
    }

    /** Main method of Game */
    public static void main(String argv[]) {
        new Game();
    }

    /** Sets up frame and panel */
    private void initializeGame() {
        panel = createPanel();

        panel = (JPanel) frame.getContentPane();

        cardLayout.show(panel, "startMenu");
    }

    private JPanel createPanel() {
        panel = new JPanel();
        cardLayout = new CardLayout();
        panel.setLayout(cardLayout);

        panel.add(startMenu, "startMenu");
        panel.add(pauseMenu, "pauseMenu");
        panel.add(levelMenu, "levelMenu");
        panel.add(gamePanel, "gamePanel");

        return panel;
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-17 00:59:55

您已经将panel变量分配给两个对象,一个由createPanel()方法创建,另一个通过获取contentPane。一个是向GUI添加组件,另一个是调用show方法,由于这个原因,JVM会抱怨。解决方案不是这样做,只给这个变量分配一次对象。

为了明白我的意思,搜索你的代码

代码语言:javascript
复制
 panel = 

看到突然出现的台词。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30282236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档