0

我一直在互联网上漫游,寻找这个问题的答案,但空手而归。

我正在学习大学的 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 自动加载的类之一,但我在任何一个中都找不到该方法。

这种方法从何而来?
为什么前面没有任何东西?
还有什么其他方法可以像这样使用?

4

5 回答 5

2

如果您查看javadoc,您会发现add. JFrame但是,有几个add方法是从 Container 和 Component 继承的,这些方法都列在“继承自...的方法”部分中。

于 2013-02-13T18:32:45.457 回答
2

JFrame#add是一个实例方法,它继承自java.awt.Container. 它没有在我的任何实例之前,因为您JFrame直接将 a 子类化了。通常您不会向框架添加任何新功能,因此首选方法是直接创建一个实例并使用:

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

查看javadoc了解所有可用的方法。

于 2013-02-13T18:33:03.723 回答
1

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

于 2013-02-13T18:34:01.360 回答
1

HelloFrameMenu必须扩展JFrameadd方法来自Container,用于向框架添加可视组件。如果addsetSizesuper为前缀(例如super.add(...))会更容易理解,这是我一直用来表示该方法来自超类的方法。

于 2013-02-13T18:36:03.820 回答
1

这与继承有关。Java 是一种面向对象的语言,这意味着(几乎)一切都是对象。

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

在您的情况下,JFrame 扩展了 Container 并且 Container 有一个 add 方法。

于 2013-02-13T18:36:35.580 回答