setContentPane(),doLayout()& jFrame java中的setLayout()

时间:2013-01-05 17:19:29

标签: java swing jframe

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

另一个疑问:如果我在使用JFrame&除了JPanel之外的其他摆动容器,不需要手动设置/创建内容窗格,但在其他情况下,我需要手动设置它?

提前致谢

2 个答案:

答案 0 :(得分:2)

setContentPane用于设置Window中的顶级可视元素,而setLayout设置布局管理器,doLayout调用布局管理器。通常不需要调用doLayout,因为当主要属性发生变化时会自动调用doLayout,例如添加/删除元素或重新调整元素大小。

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

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

  • 如果您想设置布局管理器(例如GridBagLayoutFlowLayout),请使用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

JPanelContainer,JFrame使用setContentPane,这允许我们设置容器,因此JPanel / JComponent extends < / em> Conatiner以便可以将其添加为 contentPane 。因此它接触setContentPane(..)方法。 默认情况下,JPanel有一个内容窗格,或者我们如何向其中添加组件?

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