【发布时间】:2014-12-19 07:11:57
【问题描述】:
我有一个儿童数学游戏应用程序。自从我上大学以来,我过去的所有项目通常只有一个上帝对象,但为了这个应用程序,我将我的代码分成多个类:
-
MathsGame.java:初始化组件并构造和控制 UI 的主类。 -
DiffScreen.java:包含在难度选择屏幕上使用的方法。 -
GameScreen.java:包含在游戏画面上使用的方法。 -
EndGameScreen.java:包含在游戏结束画面上使用的方法。 -
MigJPanel.java:扩展JPanel并将布局设置为MigLayout并添加一个哑光边框。
3 个 XScreen 类控制的每个屏幕只是 MigJPanel 的一个实例,并且使用 CardPanel 容器 JPanel 切换到屏幕。
我想知道如何将我的代码划分为每个类,以便正确抽象它们,但我不完全确定如何处理这个问题。
-
我的 3 个屏幕类是否应该从我的
MigJPanel扩展,以便可以实例化这些类?因此,我的
DiffScreen、GameScreen和EndGameScreen类不只包含与每个屏幕相关的方法,然后从MathsGame调用,每个屏幕将在其自己的类中控制自己。 -
如果上一个问题是肯定的,每个屏幕的 UI 组件是否应该在该屏幕的类中制作?
目前,三个屏幕的所有组件都是在我的
MathsGame构造函数中创建的。这使得屏幕和“控制”的类之间的联系(我现在非常轻松地使用这个词)之间的联系更加遥远。所以每个屏幕只是MigJPanel的一个实例,其组件在MathsGame中构造。例如,EndGameScreen类与 End Game 屏幕的唯一关系是,当MathsGame导致显示 End Game 屏幕时,在那里所做的任何事情都会使EndGameScreen中的方法从MathsGame调用.
我希望我能很好地解释自己。如果没有,请发表评论,我会澄清。任何帮助将不胜感激!
【问题讨论】:
-
1- 是,2- 是。专注于自我控制并保持责任范围。管理其内容是每个 UI 屏幕的责任,没有其他人,事实上,您应该防止允许对这些组件进行无限制的修改,并且只能通过托管方法(setter 和 getter)提供访问权限,这允许修改您想要更改的属性,而不仅仅是通过 getter 提供组件,这可以防止人们删除您不想删除的组件时出现问题...
-
如果需要,您还可以使用接口来维护通用功能,因此如果
MathsGame真的只想处理一定数量的信息/功能,您可以使用所有其他接口屏幕使用将简化流程,因为MathsGame只需要了解实现接口的类,而不需要了解可能发生的所有其他事情......作为建议...... -
@MadProgrammer 这很有帮助,谢谢!您想将其作为答案,以便我接受吗?另外,我应该把切换屏幕的代码放在哪里?我在每个屏幕类中的
ActionListeners 上都出现错误,因为该方法是非静态的,因为该方法是非静态的,但我无法将其设为静态,因为它正在为我的CardLayout执行show()这是在我的MathsGame类中创建的。我假设我应该有 3 种方法在类之间切换,但我应该把它们和我的CardLayout放在哪里?
标签: java swing cardlayout