-1

有人可以向我解释以下内容,因为我很困惑何时使用:setContentPane()doLayout()setLayout()在 JFrame java中。

另一个查询:如果我说当使用 JFrame 和 JPanel 以外的其他摆动容器时不需要手动设置/创建内容窗格但在其他情况下我需要手动设置它,我是否正确?

提前致谢

4

2 回答 2

2

setContentPane 用于设置 Window 内的顶级可视元素,而 setLayout 设置布局管理器,doLayout 调用布局管理器。通常 doLayout 不需要调用,因为它会在主要属性更改时自动调用,例如添加/删除元素或调整大小。

我认为没有任何理由与这些功能混淆:

  • 如果您想在框架中添加视觉元素,请使用setContentPane(component)(或add(component))。

  • 如果要设置布局管理器(如GridBagLayoutFlowLayout),请使用setLayout(layoutmanager).

  • 如果您更改了某些内容并且您的框架看起来很奇怪,请调用doLayout().

于 2013-01-05T17:31:03.383 回答
2

根据java文档:

设置布局管理器。被覆盖以有条件地将调用转发到 contentPane。

所以基本上它允许我们设置LayoutManager我们JFramecontentPane,因为调用setLayout(..)JFrame被转发到contentpane

设置 contentPane 属性。此方法由构造函数调用。Swing 的绘制体系结构需要包含层次结构中的不透明 JComponent。这通常由内容窗格提供。如果您替换内容窗格,建议您将其替换为不透明的 JComponent。

这指的是添加到我们的主要组件JFrame(并跨越JFrame整个大小),这是所有其他组件将在调用add(..)on JFrameinstance 时添加的地方。

使该容器布置其组件。大多数程序不应直接调用此方法,而应调用 validate 方法。

这将导致在我们更改LayoutManager容器时显示视觉更改,但正如我们所见,我们不应该调用它,而是使用validate()/revalidate()后跟从repaint()大小、重新布局和/或添加/删除组件进行视觉更改来自容器,可见。

至于:

如果我说在使用 JFrame 和 JPanel 以外的其他摆动容器时不需要手动设置/创建内容窗格但在其他情况下我需要手动设置它,我是否正确?

不,这也适用JPanel

AJPanel是一个Container,JFrame 使用setContentPane,它允许我们设置一个容器,因此JPanel/JComponent 扩展 Conatiner,以便它可以添加为contentPane。因此它暴露于该setContentPane(..)方法。默认情况下有一个JPanel内容窗格,或者我们如何向其中添加组件?

因此,我们不必手动创建JPanel contentPane

于 2013-01-05T17:41:03.813 回答