4

我一直想知道如何制作一个包含多个 JFrame 的程序。我的意思是我只想要一个类来处理所有的 GUI 和东西,但我怎样才能有效地做到这一点?很多教程都说我们通过继承JFrame来制作JFrame。但是如果我想要很多帧怎么办?

例如:一帧中的应用程序标题和一些选项菜单是一帧主要工作应用程序是一帧就像在游戏中一样。

但我不确定我是否与 JPanel 有关?我对2完全不解。我只想要一个不动的框架,但基本上框架的内容正在改变。例如,当我单击 START 时,它将变为框架的游戏风格。

4

4 回答 4

10

你正在寻找一个JFrame与一个CardLayout。一些背景:

JFrame物理窗口。它带有一个标题栏和三个按钮:最小化、最大化和关闭。把它想象成一个相框。

JPanel是一种“内容持有者”。通常,您将其他组件(按钮、动画等)放在 JPanel 上,然后将该 JPanel 放入 JFrame。使用我们的相框示例,JPanel 将是您放入相框的相纸。然后,其他组件将是图片本身的实际内容,最后您拥有的是一张漂亮的图片……或者在您的情况下,是一个应用程序。

将 JFrame 设置为使用 aCardLayout本质上可以让您在同一个 JFrame 中同时拥有多个 JPanel,同时仍然一次只显示一个。因此,对于您的应用程序,您将拥有(至少)两个 JPanel:一个用于菜单,一个用于游戏。当应用程序启动时,您会显示 MenuPanel。当用户单击“开始”时,您切换到 GamePanel。MenuPanel 将被置于后台,并且在您再次将其调用到前台之前将无法访问。

另一方面,如果您创建多个 JFrame,您将拥有两个或更多物理上独立的窗口,可以单独处理。这实际上对于游戏开发来说可能很酷。虽然为第二个窗口构建和链接 GUI 需要更多时间,但您可以让该窗口实时影响游戏设置(射速、子弹强度、玩家速度等)

于 2013-07-15T13:14:20.940 回答
1

我认为您所追求的是卡片布局

CardLayout 对象是容器的布局管理器。它将容器中的每个组件都视为一张卡片。一次只能看到一张卡片,并且容器充当一叠卡片。添加到 CardLayout 对象的第一个组件是容器首次显示时的可见组件。

你可以在这里看到它是如何使用的。

此布局管理器允许您管理需要跨各种功能共享框架的情况。例如,在您的情况下,您可以有一个功能来处理游戏的设置部分,而另一个功能可以处理实际游戏本身。

然后,您可以使用管理器在这些特定项目之间切换。

于 2013-07-15T13:13:17.937 回答
0

您还可以将 Desktopane() 和 InternalFrame() 用于多帧。Internalframe 与 Jframe 非常相似,但每次都需要 setVisible(true) 或 show()。

于 2014-01-04T09:28:19.940 回答
0

无论您使用哪种 IDE,您都可以在同一个包中创建多个 JFrame,并为每个 JFrame 设置单独的代码。

如果要链接每个框架,则必须从每个 JFrame 创建实例。例如,如果按下按钮时,我们需要调用一个新 Frame(我们已经创建)

NewJFrame1 frame1=new NewJFrame1();

frame1.setVisible(true);

然后你可以决定用你当前的 JFrame 做什么。例如:(隐藏,关闭)

于 2015-05-18T11:35:37.533 回答