有人可以向我解释以下内容,因为我很困惑使用& when: setContentPane(), doLayout()& JFrame java中的 setLayout()。
另一个疑问:如果我在使用JFrame&除了JPanel之外的其他摆动容器,不需要手动设置/创建内容窗格,但在其他情况下,我需要手动设置它?
提前致谢
答案 0 :(得分:2)
setContentPane用于设置Window中的顶级可视元素,而setLayout设置布局管理器,doLayout调用布局管理器。通常不需要调用doLayout,因为当主要属性发生变化时会自动调用doLayout,例如添加/删除元素或重新调整元素大小。
我认为没有理由与这些功能混淆:
如果您想在框架中添加视觉元素,请使用setContentPane(component)
(或add(component)
)。
如果您想设置布局管理器(例如GridBagLayout
或FlowLayout
),请使用setLayout(layoutmanager)
。
如果您更改了某些内容且框架看起来很奇怪,请致电doLayout()
。
答案 1 :(得分:2)
根据java docs:
设置LayoutManager。重写以有条件地转发呼叫 到contentPane。
所以基本上它允许我们设置LayoutManager
的 contentPane 的JFrame
,因为setLayout(..)
上的调用JFrame
将被转发到的contentPane
设置contentPane属性。这个方法被调用 构造函数。 Swing的绘画架构需要不透明 包含层次结构中的JComponent。这通常由提供 内容窗格。如果替换内容窗格,建议使用 你用不透明的JComponent替换它。
这是指添加到JFrame
的主要组件(并涵盖JFrame
的整个大小),这是在add(..)
上JFrame
的调用中添加所有其他组件的位置{1}}实例。
使此容器布局其组件。大多数程序应该 不直接调用此方法,但应调用validate方法 代替。
当我们更改容器的LayoutManager
时,这会导致显示视觉更改,但正如我们所看到的,我们不应该调用此更改,而是使用validate()
/ revalidate()
通过repaint()
进行视觉上的更改,从容器中添加/删除大小,重新布局和/或组件,可见。
至于:
如果我说使用JFrame&其他摆动容器 除了JPanel之外,不需要设置/创建内容窗格 手动但在其他人我需要手动设置它?
不,这也适用于JPanel
。
JPanel
是Container
,JFrame使用setContentPane
,这允许我们设置容器,因此JPanel
/ JComponent
extends < / em> Conatiner
以便可以将其添加为 contentPane 。因此它接触setContentPane(..)
方法。
默认情况下,JPanel
有一个内容窗格,或者我们如何向其中添加组件?
因此,我们不必手动创建JPanel
contentPane 。