从 JFrame 扩展

Posted

技术标签:

【中文标题】从 JFrame 扩展【英文标题】:Extending from JFrame 【发布时间】:2013-07-12 16:22:21 【问题描述】:

延伸到JFramejavax.swing.JFrame有区别吗?

例子:

public class Authenticator extends JFrame 

还有……

public class Authenticator extends javax.swing.JFrame 

【问题讨论】:

不要扩展框架或其他***容器。而是创建和使用一个实例。 见***.com/q/1143923/758280 如果你有另一个类调用JFrame那么你需要识别你想要使用的包 @AndrewThompson 为什么?我一直习惯将 GUI 类扩展为 JFrame,这对我来说更容易,但我不知道这被认为是一种不好的做法,为什么它被认为是一种不好的做法? @BackSlash 您是否在需要时扩展JButtonJLabel?有关更多技术原因,请参阅 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 扩展的主要内容,如果未能解决你的问题,请参考以下文章

无法将 JMenuBar 添加到扩展的 JFrame

使用 getGraphics() 绘制对象而不扩展 JFrame

无法将组件添加到扩展 JFrame 的类

将 JTextArea 添加到 JFrame

如何为 JFrame 上的 JComponent 添加滚动功能?

从 Java Swing 中的另一个类访问 JPanel 变量