我一直在互联网上漫游,寻找这个问题的答案,但却空手而归。
我正在跟随大学的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自动加载的类之一,但我找不到方法。
这种方法来自哪里?
为什么之前没有任何东西?
还有什么其他方法可以这样使用?
答案 0 :(得分:2)
如果查看javadoc,您会发现add
中没有JFrame
方法。但是,有几个add
方法继承自Container和Component,它们列在方法继承自... 部分。
答案 1 :(得分:2)
JFrame#add是一个继承自java.awt.Container
的实例方法。它不在我的任何实例之前,因为您直接将JFrame
子类化。通常,您不会向框架添加任何新功能,因此首选方法是直接创建实例并使用:
JFrame myFrame = new JFrame();
...
myFrame.add(...);
查看所有可用方法的javadoc。
答案 2 :(得分:1)
类HelloFrameMenu
必须扩展JFrame
,add
方法来自Container,用于向框架添加可视组件。如果add
和setSize
以超级为前缀(例如super.add(...)
),那将更容易理解,这就是我总是表示该方法来自一个超类。
答案 3 :(得分:0)
您可以将其视为“this.add”,因为它是Container的继承成员。
答案 4 :(得分:0)
这与继承有关。 Java是一种面向对象的语言,这意味着(几乎)所有东西都是一个对象。
然后可以按层次排列对象 例如,Cat对象可能会扩展Animal对象。它继承了Animal的所有行为(方法),并且可以添加自己的行为。
在您的情况下,JFrame扩展Container和Container有一个add方法。