【问题标题】:Container (AWT) Object in JavaJava 中的容器 (AWT) 对象
【发布时间】:2020-09-14 07:03:21
【问题描述】:

我正在研究 AWT 为 FrameJFrame 并且我看到对象 Contianer 作为它们的父对象,但我想知道我可以将容器对象用作 FrameJFrame,下面是我的代码,但是它不起作用:

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() 而不是JFrame

【问题讨论】:

  • 它不是直接使用的,使用它的一个子类。
  • 好的,谢谢 Joachim Sauer,你能告诉我如何知道该对象是否是子类吗?
  • 您应该阅读继承的工作原理。
  • 为什么我们不使用 Container 而不是 JFrame ? - Container 只是用来存放东西。它没有任何其他属性。如果你有一个“塑料”容器会发生什么。你可以把它放在微波炉里加热食物,但你不能把它放在烤箱里,因为它会融化。 Window 是一个容器,它具有允许您在桌面上显示它的额外属性。 JFrame 具有额外的属性,允许您在桌面上显示它并带有标题栏和边框。

标签: java swing jframe containers frame


【解决方案1】:

这不是继承的工作原理。

Container 是一个基类,它除了跟踪其子类之外没有更多功能。就是这样。它本身不是一个窗口。

来自 Javadoc:

通用 Abstract Window Toolkit(AWT) 容器对象是可以包含其他 AWT 组件的组件。
添加到容器的组件在列表中进行跟踪。列表的顺序将定义容器内组件的从前到后的堆叠顺序。如果在将组件添加到容器时没有指定索引,它将被添加到列表的末尾(因此到堆叠顺序的底部)。

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

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

来自 java.awt.Frame 的 Javadoc:

Frame 是一个带有标题和边框的顶级窗口。

还有一些关于 Frame 如何布局内容 etc.pp 的细节,以及 窗口装饰 的外观和行为方式,尤其是 wrt。 WindowEvents 像 WINDOW_CLOSING。这些都是只存在于框架中的东西,而不是容器。

如果你深入到 JFrame,你会得到一些专门的处理,例如内容窗格以使其更好地与 JFC/Swing 组件架构配合使用。

Container window = new Container();

这是您可以编写的代码,但几乎没用。为了让容器真正显示在屏幕上,它仍然需要放入一个窗口

Container window = new JFrame();

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

【讨论】:

    【解决方案2】:

    您应该使用 JFrame 或 Frame,因为它自己的 Container 不是显示给用户的“窗口”。

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

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

    【讨论】:

    • 感谢 VirtCode,但主要问题是我们为什么不使用 Container 而不是 JFrame ?
    • 因为Container只是一个可以容纳其他组件列表的组件,而不是显示给用户的窗口。
    猜你喜欢
    • 1970-01-01
    • 2018-03-21
    • 2011-07-04
    • 2011-08-31
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多