从 JFrame 扩展
Posted
技术标签:
【中文标题】从 JFrame 扩展【英文标题】:Extending from JFrame 【发布时间】:2013-07-12 16:22:21 【问题描述】:延伸到JFrame
和javax.swing.JFrame
有区别吗?
例子:
public class Authenticator extends JFrame
还有……
public class Authenticator extends javax.swing.JFrame
【问题讨论】:
不要扩展框架或其他***容器。而是创建和使用一个实例。 见***.com/q/1143923/758280 如果你有另一个类调用JFrame
那么你需要识别你想要使用的包
@AndrewThompson 为什么?我一直习惯将 GUI 类扩展为 JFrame
,这对我来说更容易,但我不知道这被认为是一种不好的做法,为什么它被认为是一种不好的做法?
@BackSlash 您是否在需要时扩展JButton
或JLabel
?有关更多技术原因,请参阅 Jeffrey 的链接。
【参考方案1】:
除非您有另一个名为 JFrame
的类并且正在导入它而不是 javax.swing.JFrame
,否则这没有区别。
也就是说,正如 Andrew Thompson 所说,您不应该扩展 JFrame
,而应该使用实例。
【讨论】:
【参考方案2】:如果你导入 javax.swing.JFrame; 那么你使用 公共类 Authenticator 扩展 JFrame 如果没有,那么使用 公共类 Authenticator 扩展 jvax.swing.JFrame 但第二种方法主要用于不同包中具有相同名称的类时,以区分类。 例如 [-]我的包裹 |----[-]包装1 |---TestClass.java |----[-]包装2 |---TestClass.java
这是我们有一个名为 mypackage 的包和两个子包 pakage1 和 pakage2 的情况
现在如果我们只导入它会给出这个
import mypackage.pakage1.TestClass;
import mypackage.pakage2.TestClass;
class Testw
public static void main(String []args)
System.out.println("Swah!");
会报以下错误
C:\Program Files\Java\jdk1.6.0_38\bin>javac Testw.java
Testw.java:2: mypackage.pakage1.TestClass is already defined in a single-type import
import mypackage.pakage2.TestClass;
^
1 error
那你干什么? 在这种情况下,您使用第二种方法,也称为完全限定名称 现在您导入一个包并为其他包使用完全限定名称。
import mypackage.pakage1.TestClass;
class Testw
public static void main(String []args)
TestClass testclass1 = new TestClass();
mypackage.pakage2.TestClass testclass2 = new mypackage.pakage2.TestClass();
System.out.println("Swah!");
所以整个事情的总结是当他们的名字冲突时使用完全限定名,我们也可以在他们没有名字冲突时使用这种方法,他们不会对程序产生任何影响
【讨论】:
【参考方案3】:这取决于您的导入。如果你导入 javax.swing.JFrame,没有。
【讨论】:
【参考方案4】:无论如何你都必须导入JFrame
,它最有可能来自javax.swing
包,如果包含多个JFrame
类,你只需要写整个包路径,这样编译器就会知道哪一个你想用,所以如果只有一个JFrame
类,那么导入就够了,你不用再指定了
【讨论】:
以上是关于从 JFrame 扩展的主要内容,如果未能解决你的问题,请参考以下文章
使用 getGraphics() 绘制对象而不扩展 JFrame