【问题标题】:How to implement my code in MVC Java?如何在 MVC Java 中实现我的代码?
【发布时间】:2012-04-14 13:07:28
【问题描述】:

我正在制作一款包含三款游戏的游戏。我从一个类中开始我的代码,现在我想将它移动到 MVC 格式中,但我遇到了错误。我开始在 GameView 类中编写所有代码,现在我想将一些代码从这个类移动到 SView 类。问题是我已经在 GameView 类中初始化了 JFrame,当我将代码移动到 SView 类时它找不到变量帧。所以后来有人告诉我把它做成一个面板然后移动它,但这只是搞砸了我的游戏。

【问题讨论】:

    标签: java swing model-view-controller jframe hierarchy


    【解决方案1】:

    您必须以不同的方式组织事物。需要考虑的一些事项:

    • GameView 是您的主窗口吗?就这样GameView extends JFrame
    • SView 是面板吗?就这样SView extends Panel

    要考虑的另一件事:SView 是您想要添加到您的GameView 的某个面板,但添加本身不是SView 的责任。相反,只需在这两个类之外的某个地方实例化和组装这些组件,f.e.:

    GameView gameView = new GameView();
    gameView.add(new SView());
    

    您也可以让GameView 在其构造函数代码中添加new SView()

    无论如何,这里的重点是组件不应该关心将自己添加到其父级,而只需创建自己的内容/子级。

    祝你好运。

    【讨论】:

    • 我认为在上面的任何原始海报代码中都没有充分的理由让类扩展 JFrame 或 JPanel。
    • 最后一行怎么办?它在参数中有框架。 panel.setLocation((frame.getWidth()-panel.getWidth())/2, 80);
    【解决方案2】:

    一些建议:

    • 主 GUI 将使用 CardLayout,因此您可以轻松交换 JPanel。
    • 选择游戏菜单的主要功能是交换 JPanel,因此选择的游戏被可视化,然后初始化选择的游戏。
    • 单独处理每个游戏。为每个单独的游戏类设置一个 JPanel 来举办游戏。为每个游戏类提供一个用于测试的主要方法,该方法将创建一个 JFrame,创建一个游戏类实例,将实例的 JPanel 放入 JFrame,初始化游戏并显示它。
    • 游戏自行运行后,尝试将其添加到更大的 GUI,即可以显示多个游戏的 GUI。
    • 考虑让每个游戏类实现一个通用接口以实现通用功能。例如,您可以给接口一个 initialize() 方法,每个游戏类都会覆盖该方法。
    • 每个游戏类都需要基于 MVC,以便它有一个模型、一个与模型交互的控制类和一个在 JPanel 上显示模型状态的视图类,如上所述。

    【讨论】:

    • +1 优秀的设计建议; MainPanel 是第三点的一个例子。您可以使用任意数量的实例来构建更大的 GUI 原型。
    • @trashgod:谢谢。这是我的 MVC 示例链接:MVC_ProgressBarThread
    • example;我引用它here 作为实现观察者模式的一种方式。如有需要,请随时编辑我的任何内容。
    • 对不起,我以为我回复了。我的错。我的问题是我不了解 CardLayout 部分,它是如何工作的?
    • @UmzzMo:查看CardLayout tutorial,实际上查看那里的所有 Swing 教程。
    猜你喜欢
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多