如何将多个类用于应用程序的不同屏幕?

时间:2014-12-18 20:47:36

标签: java swing cardlayout

我有一个适合孩子的数学游戏应用程序。由于我在大学,我通常只有一个上帝对象用于我过去的所有项目,但是对于这个应用程序,我将我的代码分成多个类:

  • MathsGame.java:初始化组件和构造并控制UI的主类。
  • DiffScreen.java:包含在难度选择屏幕上使用的方法。
  • GameScreen.java:包含在游戏屏幕上使用的方法。
  • EndGameScreen.java:包含在最终游戏屏幕上使用的方法。
  • MigJPanel.java:展开JPanel并将布局设置为MigLayout并添加遮罩边框。

3个XScreen类控制的每个屏幕只是MigJPanel的一个实例,屏幕将切换为使用CardPanel容器JPanel

我想知道如何将我的代码划分到每个类,以便它们被正确抽象,但我不完全确定如何处理它。

  1. 我的3个屏幕类是否应该从我的MigJPanel扩展,以便这些可以实例化?

    因此,不是让我的DiffScreenGameScreenEndGameScreen类只包含与每个屏幕相关的方法,然后从MathsGame调用,每个屏幕都会控制自己在自己的班级内。

  2. 如果对上一个问题是肯定的,那么每个屏幕的UI组件是否应该在该屏幕的类中进行?

    目前,三个屏幕中每个屏幕的所有组件都是在我的MathsGame构造函数中创建的。这使得屏幕和“控制”的类之间的连接(我此刻非常轻易地使用这个词)它甚至更远。因此,每个屏幕只是MigJPanel的一个实例,其组件在MathsGame中构建。 EndGameScreen类对于结束游戏屏幕的唯一关系是,当MathsGame导致显示结束游戏屏幕时,在那里完成的任何事情都会在EndGameScreen中生成一个方法从MathsGame开始。

  3. 我希望我能很好地解释自己。如果没有,请发表评论,我会澄清。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

  1. 是。
  2. 注重自我遏制并保持责任范围。每个UI屏幕都有责任管理它的内容,其他人,实际上,你应该防止允许对这些组件进行无限制的修改,并且只能通过托管方法间接提供访问(setter和getter),这允许修改您想要更改的属性,而不是简单地通过getter提供组件,这可以防止人们移除您不想删除的组件的问题,例如。

    如果需要,您还可以使用接口来维护常用功能,因此如果MathsGame真的只想处理一定数量的信息/功能,您可以使用所有其他屏幕使用的接口,将简化过程,因为MathsGame只需要知道实现接口的类,而不是可能正在进行的其他任何事情......作为建议..

      

    另外,我应该在哪里放置用于在屏幕之间切换的代码?

    从我的角度来看,MathsGame游戏的责任是确定何时以及应该显示哪个屏幕。我通常会做的是提供某种通知过程,当前屏幕可以通过监听器或其他同意的界面要求MathsGame切换屏幕。这意味着每个屏幕都需要引用MathsGame

    我没有直接传递它(MathsGame),而是创建了MathsGame将实现的接口(比如说NavigationController),它定义了每个子屏幕可以调用的调用/合约例如,使用(nextScreen / previousScreen)。

    请查看Model-View-Controller了解更多提示