jFrame中的多个jPanel并将jPanel切换出

时间:2016-10-18 09:26:52

标签: java swing user-interface layout-manager cardlayout

现在我正在尝试编写一个小俄罗斯方块克隆。 因此我希望有 ONE jFrame,它应包含多个jPanel(主菜单,游戏本身,选项等等)。

我搜索了一下,很多人说应该使用CardLayout。 所以我转到我的NetBeans GUI Builder,将jFrame切换到CradLayout并添加了2个Panel; 第一个面板只包含一个按钮,第二个面板包含我的“游戏”(我的Tetrismatrix的图形显示,下一个Block的图形显示和一个退出按钮)。

图片以便更好地理解:

“主菜单”只是一个显示“开始游戏”的按钮(不能发布超过2个链接,因为我是新的)。

My current "Game Menu"

The structure of the "Card Layout in the NetBeans GUI Builder"

为了实现Panels之间的切换,我正在使用它(经过一些研究后发现):

@Action
public void cardSwitcher() {
    CardLayout cl = (CardLayout) (gamePanel.getLayout());
    cl.next(gamePanel);
}

按“开始游戏”按钮,然后调用方法cardSwitcher()。

当我现在运行我的jFrame它开始很好,我看到我的开始游戏按钮和一切。但是只要我按下按钮,我就会得到一个ClassCastException。

  

“javax.swing.GroupLayout无法强制转换为java.awt.CardLayout”

所以现在我的问题是,我是否可以实现我的目标,即在其中使用CardLayout切换这些具有多个jPanel的1个帧,或者是否有更简单/更好的方法来执行此操作?

提前感谢您的帮助。

PS:我很抱歉错误的拼写或错误的语法,我不是母语人士。 此外,如果问题已经得到解答,我就傻到找到关于它的帖子我将立即删除这篇文章。我总是愿意接受建设性的批评。

1 个答案:

答案 0 :(得分:0)

是的,您可以在cardLayout中切换面板。您应该直接从您定义它的组件(可能是JFrame#getLayout())中取出cardLayout,而不是从cardLayout中的面板中取出(从您编写的内容我认为gamePanel在cardLayout中)。