2013-02-13 71 views
0

我一直在漫游互联网寻找这个问题的答案,但已经空手而来了。使用JFrame时,add()方法来自哪里?

我下一个JFrame大学实用的,并且使用的实际指导片我有这个基本的代码我的讲义和建议:

public HelloFrameMenu() 
{ 
    message = "Hello, World!"; 
    label = new JLabel(message); 
    label.setFont(new Font("Serif", Font.PLAIN, DEFAULT_SIZE)); 
    add(label, BorderLayout.CENTER); 
    createSouthPanel(); 

    setSize(FRAME_WIDTH, FRAME_HEIGHT); 
} 

这造成我的JPanel并执行短信可以正常工作的createSouthPanel()方法并向JFrame添加一些菜单列表。

我的问题是关于添加功能。我不明白这是什么。我想如果它是一个静态方法,它的类名将在它之前。不过,我认为它是JFrame包的一部分,或者是由Java自动加载的类之一,但我无法在其中找到该方法。

此方法来自哪里?
为什么前面没有任何东西?
还有什么其他的方法可以使用?

回答

2

如果你看看javadoc,你会发现在JFrame中没有add方法。但是,多个add方法从Container和Component继承,这些方法在方法中列出,该方法从...节继承。

+0

从字面上看,我发现它在Java API的底部。咄!但是,为什么不必在任何事情之前?例如Container.add或其他东西(请注意,我以前从未使用过容器)。 – 2013-02-13 18:33:48

+0

@AndrewMartin由于JFrame是Container的一个子类,因此它会自动继承它的所有方法。它与容器或GUI无关,它只是继承在Java中的工作方式。 – assylias 2013-02-13 18:34:53

+0

谢谢 - 我显然还有很多东西要学。在时间限制允许的情况下,我会将您的答案标记为已接受,因为您是第一个回复。 – 2013-02-13 18:35:45

2

JFrame#add是从java.awt.Container继承的实例方法。因为您已直接对JFrame进行了分类,因此不会在此处列出任何实例。通常情况下,你不需要添加任何新功能在框架上的首选的方法是直接创建一个实例,并使用:

JFrame myFrame = new JFrame(); 
... 
myFrame.add(...); 

退房的javadoc所有可用的方法。

+0

感谢你 - 每当我感觉我开始移动过去的初学者问题时,有些东西就让我再次陷入困境! – 2013-02-13 18:42:36

0

您可以将其视为“this.add”,因为它是Container的继承成员。

0

HelloFrameMenu类将不得不延长JFrameadd方法来自Container并用于添加视觉组件到框架。如果addsetSizesuper(例如super.add(...))作为前缀,那么我会一直表示该方法来自一个超类,这会更容易理解。

+0

我同意 - 会帮助像我这样的小菜鸟! – 2013-02-13 18:37:31

+0

不只是noobs,但任何人 - 它只是更容易掌握代码。特别是如果你有一个狭窄的关注范围(像现在所有人):)哈哈 – amphibient 2013-02-13 18:38:40

0

这是关于继承。 Java是一种面向对象的语言,它意味着(几乎)所有东西都是一个对象。

然后可以按层次结构排列对象。
例如,一个Cat对象可能会扩展一个Animal对象。它继承了Animal的所有行为(方法),并且可以添加它自己的。

就你而言,JFrame扩展Container和Container有一个add方法。