有关在类中扩展JFrame的问题?

时间:2009-12-20 12:33:10

标签: java core jframe

好吧,我不是一个Java菜鸟,只是在我学习更多有趣的东西,比如MySQL,Servlets,Java EE,JDBC等等时,我已经忘记了一点关于核心Java的事情。所以不要把你的答案框起来就像我是初学者一样。现在问题.....

我正在编写一个扩展JFrame的类(简称ThisIsAJFrameExtendingClass),为了最大限度地减少与整个项目的混淆,我还希望在ThisIsAJFrameExtendingClass中停放一些其他实用工具方法。我打算让这个类(ThisIsAJFrameExtendingClass)从用户那里寻求某些输入;自杀(即dispose())。所以,我的问题是,如何在类中独立使用实用程序方法,而不会在用户屏幕上弹出任何JFrame。

我喜欢在ThisIsAJFrameExtendingClass类中的多个构造函数的帮助下解决方案,其中,调用无参数构造函数返回JFrame,第二个构造函数使用boolean参数提供对实用程序方法的访问。

[UPDATE]

哦......我只是想了一下,实用程序方法有一个返回类型的ArrayList所以,假设实用程序方法被调用utilMethod()那么:

ArrayList<String> pring = new ThisIsAJFrameExtendingClass().utilMethod();

上面的代码会输出任何JFrame吗?

4 个答案:

答案 0 :(得分:1)

您可以创建实用程序方法static,在这种情况下,可以使用ThisIsAJFrameExtendingClass.<method name>调用它们而无需创建实例。

关于构造函数的东西对我来说并没有多大意义。类的构造函数始终返回该类的实例。由于您传入的参数,它无法返回“其他内容”。

[编辑回复问题的更新]:

new ThisIsAJFrameExtendingClass()将创建类的实例,运行其构造函数(以及所有超类的默认构造函数)。这可以分配继承树中每个构造函数所需的其他资源(例如其他Swing组件或其他)。因此创建了一个JFrame,但是如果你只调用utilMethod()并且永远不会挂起对框架的引用,那么它将被垃圾收集并且在将来某个时候释放它的资源。

创建一个JFrame实例以在其上调用单个实用程序方法并不是一种特别有效的方法,但它不会导致任何问题。 (正如Chad所述,默认情况下JFrame不可见,因此如果您在“util”模式下使用它,用户将看不到任何内容。

对于返回ArrayList,作为使用集合时的一般规则,您应该返回有意义的最高级别接口而不是具体类。因此,在这种情况下,请考虑返回List<String>甚至Collection<String>

答案 1 :(得分:1)

我在支持你的概念方面遇到了很多麻烦,这对我来说听起来有点困惑。至少,它听起来像是可怕的设计。但我确实有一些建议:

  1. 您可以将这些实用程序方法设置为静态,然后根本不需要实例化您的类来使用它们。这将是最简单的情况。
  2. 您可以将实用程序方法打包到框架的静态内部类中,这实际上可以满足每个文件只有一个类的要求。
  3. 最后,您是否希望一旦用户完成JFrame消失,或者您想要终止该应用程序? dispose()只会做前者,你的应用会继续作为一种无头僵尸程序运行。

答案 2 :(得分:0)

好的,我们假设您需要的方法不是静态的。

在这种情况下,请记住,除非你调用setVisible(true),否则JFrame不会显示;因此,请确保您永远不会显示框架,并且您可以使用您想要的任何功能,而不会让用户烦恼。

答案 3 :(得分:0)

或者您可以正确设计并将实用程序方法分解为单独的类......