Java中的容器AWT对象

问题描述

我正在以FrameJFrame的形式对AWT进行研究,并且发现对象Contianer是它们的父对象,但是我不知道我可以将容器对象用作Frame还是{ {1}},以下是我的代码,但无法正常工作:

JFrame

我们为什么不使用public class icontainer { public static void main(String[] args) { Container icon= new Container(); // new JFRAME(); icon.setSize(300,300); icon.setLocation(300,300); icon.setVisible(true); } } 代替icon = new Container()

解决方法

继承不是这样的。

容器是一个基类,它不多但可以跟踪其子代。就是这样。它本身不是窗口。

来自Javadoc:

通用抽象窗口工具包(AWT)容器对象是可以包含其他AWT组件的组件。
在列表中跟踪添加到容器的组件。列表的顺序将定义容器内组件从前到后的堆叠顺序。如果在将组件添加到容器时未指定索引,则会将其添加到列表的末尾(因此也将添加到堆叠顺序的底部)。

但是就是这样。没有任何地方提到窗户。它不会单独显示任何内容。它显示在其他地方。

另一方面,JFFrame是 一个窗口(它实际上是通过java.awt.Frame继承自java.awt.Window)。

来自java.awt.Frame的Javadoc:

框架是带有标题和边框的顶层窗口。

然后还有一些细节,关于框架如何布置内容等pp,以及窗口装饰的外观和行为,特别是wrt。诸如WINDOW_CLOSING之类的WindowEvents。这些都是只存在于框架而不是容器中的东西。

如果您使用JFrame,则会得到一些专门的处理,例如内容窗格,以使其更好地与JFC / Swing组件体系结构一起使用。

Container window = new Container();

这是您可以编写的代码,但是几乎没有用。为了使容器实际显示在屏幕上,仍然需要将其放入窗口

Container window = new JFrame();

您可以这样做,因为JFrame是容器的子类,因此与容器赋值兼容。 但是,您将无法调用容器上java.awt.Window,java.awt.Frame或javax.swing.JFrame引入的任何方法,因为这些方法在Container上不存在。

,

您应该使用JFrame或Frame,因为其自身的容器不是向用户显示的“窗口”。

我不推荐这样做,但是您可以像这样将JFrame或Frame存储为容器:

Container icon = new JFrame();
icon.setSize(300,300);
icon.setLocation(300,300); 
icon.setVisible(true);