我总是想知道如何制作一个包含多个JFrame的程序。我的意思是我只想要一个类来处理所有的GUI和东西,但我怎么能有效地做到这一点?很多教程都说我们通过继承JFrame来制作JFrame。但如果我想要很多帧呢?
例: 具有一些选项的一帧中的应用标题 菜单是一帧 主要工作应用是一个框架 就像在游戏中一样。
但我不确定我是否与JPanel有关?我对2完全感到困惑。我只想要一个不移动的框架,但基本上框架的内容正在发生变化。 例如,当我点击START时,它将变为框架的游戏风格。
答案 0 :(得分:9)
您正在寻找JFrame
CardLayout
。一些背景:
JFrame 是物理窗口。它带有一个标题栏和三个按钮:最小化,最大化和关闭。把它想象成一个相框。
JPanel 是各种各样的“内容持有者”。通常,您将其他组件(按钮,动画,等等)放在JPanel上,然后将该JPanel打到JFrame中。使用我们的相框示例,JPanel将是您放在相框中的照片纸。其他组件将是图片本身的实际内容,最后你得到的是一张很好的图片......或者在你的情况下,是一个应用程序。
将JFrame设置为使用CardLayout
本质上可以让您同时在同一个JFrame中拥有多个JPanel,同时仍然只显示一个。因此,对于您的应用程序,您将拥有(至少)两个JPanel:一个用于菜单,一个用于游戏。当应用程序启动时,您将显示MenuPanel。当用户单击“开始”时,您切换到GamePanel。 MenuPanel将被置于后台,并且在您再次将其调用到前台之前将无法访问。
另一方面,如果您创建多个JFrame,您将拥有两个或多个物理上独立的窗口,可以单独处理。这对游戏开发来说实际上很酷。虽然为第二个窗口构建和链接GUI需要更多时间,但您可以让该窗口实时影响游戏设置(射击速度,子弹强度,玩家速度等)。
答案 1 :(得分:1)
我认为你所追求的是Card Layout:
CardLayout对象是容器的布局管理器。它对待 容器中的每个组件都作为卡片。只有一张卡片可见 一段时间,容器充当一堆卡片。首先 添加到CardLayout对象的组件是可见组件 首先显示容器。
您可以看到它的使用方式here。
此布局管理器允许您管理需要在各种功能中共享框架的情况。例如,在您的情况下,您可以具有处理游戏的设置部分的功能,以及另一个处理实际游戏本身的功能。
然后,您可以使用经理在这些特定项目之间切换。
答案 2 :(得分:0)
您还可以将Desktopane()和InternalFrame()用于多个框架。 内部框架与Jframe非常相似,但每次都需要setVisible(true)或show()。
答案 3 :(得分:0)
您正在使用哪种IDE,您可以在同一个包中创建多个JFrame,并为每个JFrame分别创建代码。
如果要链接每个帧,则必须从每个JFrame创建实例。例如,如果按下按钮,我们需要调用一个新的框架(我们已经创建)
NewJFrame1 frame1=new NewJFrame1();
frame1.setVisible(true);
然后您可以决定使用当前的JFrame。 例如:(隐藏,关闭)