有人可以向我解释以下内容,因为我很困惑何时使用:setContentPane(),doLayout()和setLayout()在 JFrame java中。
另一个查询:如果我说当使用 JFrame 和 JPanel 以外的其他摆动容器时不需要手动设置/创建内容窗格但在其他情况下我需要手动设置它,我是否正确?
提前致谢
setContentPane 用于设置 Window 内的顶级可视元素,而 setLayout 设置布局管理器,doLayout 调用布局管理器。通常 doLayout 不需要调用,因为它会在主要属性更改时自动调用,例如添加/删除元素或调整大小。
我认为没有任何理由与这些功能混淆:
如果您想在框架中添加视觉元素,请使用setContentPane(component)
(或add(component)
)。
如果要设置布局管理器(如GridBagLayout
或FlowLayout
),请使用setLayout(layoutmanager)
.
如果您更改了某些内容并且您的框架看起来很奇怪,请调用doLayout()
.
根据java文档:
设置布局管理器。被覆盖以有条件地将调用转发到 contentPane。
所以基本上它允许我们设置LayoutManager
我们JFrame
的contentPane,因为调用setLayout(..)
将JFrame
被转发到contentpane。
设置 contentPane 属性。此方法由构造函数调用。Swing 的绘制体系结构需要包含层次结构中的不透明 JComponent。这通常由内容窗格提供。如果您替换内容窗格,建议您将其替换为不透明的 JComponent。
这指的是添加到我们的主要组件JFrame
(并跨越JFrame
整个大小),这是所有其他组件将在调用add(..)
on JFrame
instance 时添加的地方。
使该容器布置其组件。大多数程序不应直接调用此方法,而应调用 validate 方法。
这将导致在我们更改LayoutManager
容器时显示视觉更改,但正如我们所见,我们不应该调用它,而是使用validate()
/revalidate()
后跟从repaint()
大小、重新布局和/或添加/删除组件进行视觉更改来自容器,可见。
至于:
如果我说在使用 JFrame 和 JPanel 以外的其他摆动容器时不需要手动设置/创建内容窗格但在其他情况下我需要手动设置它,我是否正确?
不,这也适用JPanel
。
AJPanel
是一个Container
,JFrame 使用setContentPane
,它允许我们设置一个容器,因此JPanel
/JComponent
扩展 Conatiner
,以便它可以添加为contentPane。因此它暴露于该setContentPane(..)
方法。默认情况下有一个JPanel
内容窗格,或者我们如何向其中添加组件?
因此,我们不必手动创建JPanel
contentPane。