【问题标题】:Multiple jPanels in a jFrame and switching the jPanels outjFrame 中的多个 jPanel 并将 jPanel 切换出去
【发布时间】:2016-10-18 09:26:51
【问题描述】:

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

我搜索了一下,很多人说应该使用 CardLayout。 所以我去了我的 NetBeans GUI Builder,做了一个 jFrame 将它切换到 CradLayout 并添加了 2 个面板; 第一个面板只包含一个按钮,第二个面板包含我的“游戏”(我的俄罗斯方块矩阵的图形显示、下一个块的图形显示和一个退出按钮)。

图片便于理解:

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

My current "Game Menu"

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

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

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

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

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

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

所以现在我的问题是,我什至可以实现我的目标,即拥有 1 个带有多个 jPanel 的框架,在其中使用 CardLayout 进行切换,还是有更简单/更好的方法来做到这一点?

提前感谢您的帮助。

PS:对于拼写错误或语法错误,我很抱歉,我不是母语人士。 此外,如果问题已经得到解答,并且我愚蠢地找到有关它的帖子,我将立即删除该帖子。我总是乐于接受建设性的批评。

【问题讨论】:

  • 我修好了,我的错误是我试图让 ma JFrame 成为 CardLayout,据我了解,您不能将 jFrame 转换为 CardLayout。使用 jPanel 你可以做到。所以我刚刚创建了一个新的 jPanel,将其更改为 Card 布局,并将我的结构设置在 jPanel 而不是 jFrame 中。但无论如何感谢大家,你们真的帮我找到了解决方案。

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


【解决方案1】:

是的,您可以在 cardLayout 中切换面板。您应该直接从您定义它的组件(可能是 JFrame#getLayout())中获取 cardLayout,而不是从 cardLayout 内的面板中获取(根据您所写的内容,我假设 gamePanel 在 cardLayout 内)。

【讨论】:

  • 现在“cardSwitcher”方法在我的 JFrame(名为 MainMenu)中。我将“gamePanel.getLayout()”更改为“this.getLayOut()”。
  • 但现在我得到了这个执行:
  • "java.awt.BorderLayout 无法转换为 java.awt.CardLayout"
  • 您必须先将 Frames Layout 设置为(新)CardLayout。
  • 这很奇怪,因为我将布局类型从我的 jFrame 更改为 CardLayout。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-22
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多