2 回答
TA贡献1906条经验 获得超3个赞
Java是否应该具有这样的功能?
您的代码只会执行您要告诉的内容,并且您的代码中有几个问题,其中包括一个问题:
public class CharacterCreator extends StartGame {
您通过继承StartGame的CharacterCreator类来滥用继承。您似乎正在执行此操作以允许类之间进行通信,但这不是继承的目的,并且在执行此操作时,您的子类正在调用父类的构造函数,从而创建了比您想要或需要的窗口更多的窗口。解决方案是在此处不使用继承,而是将引用传递到需要它们的位置。
还请检查使用多个JFrame,良好/不良做法?因为您的应用程序应该只有一个主应用程序窗口或JFrame。任何子窗口都应该是JDialogs,而不是JFrames。
另一个问题:StartGame扩展了JFrame,并且还包含一个JFrame变量-太多的JFrame,最好摆脱一个或另一个。通常,您不希望创建扩展顶级窗口的类,因为您会发现自己通过扩展类JFrame来使自己处于角落,从而在需要更多灵活性时强制您创建和显示JFrames。实际上,我敢冒险发现我创建的大多数Swing GUI代码都不会扩展JFrame,实际上,很少有人愿意这样做。更常见的是,您的GUI类将面向创建JPanels,然后将其放置到JFrames或JDialogs或JTabbedPanes中,或者在需要时通过CardLayouts进行交换。这将大大增加您的GUI编码的灵活性。
其他独立且无关的问题:
您似乎正在将事件驱动的GUI与控制台GUI组合在一起,因为您使用的是由System.in初始化的Scanner对象。这不是一个好主意,因为这两种编程范例很难轻松地相互配合,而是最好坚持使用线性控制台程序或事件驱动的GUI来彼此兼容。
添加回答
举报