Java中的容器(AWT)对象

Java中的容器(AWT)对象,java,swing,jframe,containers,frame,Java,Swing,Jframe,Containers,Frame,我正在研究AWT作为Frame,JFrame,我将objectContianer视为它们的父对象,但我想知道我是否可以使用container object作为Frame或JFrame,下面是我的代码,但它不起作用: public class icontainer { public static void main(String[] args) { Container icon= new Container(); // new JFRAME(); ico

我正在研究AWT作为
Frame
JFrame
,我将object
Contianer
视为它们的父对象,但我想知道我是否可以使用container object作为
Frame
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=newcontainer()
来代替
JFrame

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

我不建议这样做,但您可以将JFrame或Frame存储为如下容器:

Container icon=newjframe();
图标设置大小(300300);
图标。设置位置(300300);
icon.setVisible(true);

这不是继承的工作方式

容器是一个基类,它不做更多的事情,而是跟踪它的子类。就这样。它本身不是一扇窗户

从Javadoc:

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

但就是这样。任何地方都没有提到窗户。它本身不显示任何内容。它以其他方式显示

另一方面,JFFrame是一个窗口(它通过java.awt.Frame从java.awt.window继承)

从java.awt.Frame的Javadoc:

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

然后是关于框架如何布局内容等的一些细节,以及窗口装饰的外观和行为,尤其是wrt。窗口事件,如窗口关闭。这些东西都只存在于框架中,而不是容器中

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

容器窗口=新容器();
这是您可以编写的代码,但几乎毫无用处。为了让容器真正显示在屏幕上,它仍然需要放在一个窗口中

Container window=newjframe();
您可以这样做,因为JFrame是container的一个子类,因此它的赋值与container兼容。
但是,您无法在容器上调用java.awt.Window、java.awt.Frame或javax.swing.JFrame引入的任何方法,因为这些方法在容器上不存在。

感谢VirtCode,但主要的问题是为什么我们不使用容器而不是JFrame?因为容器只是一个可以保存其他组件列表的组件,而不是一个显示给用户的窗口。它不是直接使用的,请使用它的一个子类。好的,谢谢Joachim Sauer,您能告诉我如何知道对象是否是子类吗?您应该了解继承是如何工作的。为什么不使用容器而不是JFrame容器只能装东西。它没有任何其他属性。如果你有一个“塑料”容器会发生什么。你可以把它放在微波炉里加热食物,但你不能把它放在烤箱里,因为它会融化。窗口是一个具有额外属性的容器,允许您在桌面上显示它。JFrame具有其他属性,允许您在带有标题栏和边框的桌面上显示它。