Java CardLayout IllegalArgumentException
Java CardLayout IllegalArgumentException
我正在制作一个使用 CardLayout 在四个 JPanel(gamePanel、startMenu、pauseMenu 和 levelMenu)之间切换的游戏。我收到异常 "java.lang.IllegalArgumentException: wrong parent for CardLayout"。但是,我将所有卡片添加到面板,面板具有布局管理器 CardLayout,所以我不明白为什么面板不是父级。我查看了 CardLayout 的 Java 教程以及涉及 IllegalArgumentException 的 Stack Overflow 问题,但我看不出我做错了什么。提前致谢。
游戏:
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;
}
}
您已将 panel
变量分配给两个对象,一个是通过 createPanel()
方法创建的,另一个是通过获取 contentPane 创建的。一种是将组件添加到 GUI,另一种是调用 show 方法,因此 JVM 会报错。解决方案是不这样做,只将一个对象赋值给这个变量一次。
要了解我的意思,请在您的代码中搜索
panel =
并查看弹出的行。
我正在制作一个使用 CardLayout 在四个 JPanel(gamePanel、startMenu、pauseMenu 和 levelMenu)之间切换的游戏。我收到异常 "java.lang.IllegalArgumentException: wrong parent for CardLayout"。但是,我将所有卡片添加到面板,面板具有布局管理器 CardLayout,所以我不明白为什么面板不是父级。我查看了 CardLayout 的 Java 教程以及涉及 IllegalArgumentException 的 Stack Overflow 问题,但我看不出我做错了什么。提前致谢。
游戏:
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;
}
}
您已将 panel
变量分配给两个对象,一个是通过 createPanel()
方法创建的,另一个是通过获取 contentPane 创建的。一种是将组件添加到 GUI,另一种是调用 show 方法,因此 JVM 会报错。解决方案是不这样做,只将一个对象赋值给这个变量一次。
要了解我的意思,请在您的代码中搜索
panel =
并查看弹出的行。