当前位置:编程学习 > JAVA >>

layoutContainer方法和container.setLayout方法区别?

我在书上看到一段点BUTTON改变布局的代码:
1.
public class flowlayoutframe extends JFrame
{
   ...
   Private FlowLayout layout;
   ...
   container = getContentPane();
   ..
   btn.addActionListener 
   {
       new ActionListener()
       { ...
        layout.setAlignment(FlowLayout.CENTER);
        layout.layoutContainer(container);}
   }
}
我想问 为什么这里不能用container.setLayout(layout)呢?

2. 还有就是有时候看到set Jframe layout是直接在Frame的构造函数中setLayout(layout),有时候又是先getContentPane()给container,然后container.setLayout ,请问怎么解释?

谢谢! --------------------编程问答-------------------- flowlayoutframe 继承了JFrame,JFrame有setLayout方法。
所以直接用setLayout就是设置flowlayoutframe的布局。

flowlayoutframe.getContentPane()得到 flowlayoutframe下的container容器,调用container的setLayout方法是设置container的布局。 --------------------编程问答--------------------
引用 1 楼  的回复:
flowlayoutframe 继承了JFrame,JFrame有setLayout方法。
所以直接用setLayout就是设置flowlayoutframe的布局。

flowlayoutframe.getContentPane()得到 flowlayoutframe下的container容器,调用container的setLayout方法是设置container的布局。
谢谢!
1. 你所说的设置JFrame 布局 和 JFrame 下容器的布局,有什么区别吗,换句话说,我什么地方必须要先获取容器container?

2. 在第一段代码中,是否可以吧layout.layoutContainer(container)改成container.setLayout(layout)?后者不是更符合我们的理解习惯么,为什么书上习惯用调用Layout Manager的layoutContainer方法去告知Frame布局变了呢?
--------------------编程问答-------------------- flowlayoutframe 是房子,flowlayoutframe.getContentPane() 是这个房子内的一个桌子。
把房子的布局弄好了,桌子上东西也要摆摆。

等于布局有了一个风格,可以用到很多容器上去;且可以在容器外去设置,更换布局也方便。
container.setLayout(layout)局限在容器内去调用,耦合性稍高;更换布局还要去容器那修改代码。
作用应该是一样,只是前一种编码风格上更好。 --------------------编程问答-------------------- JFrame中是重写了Container中的setLayout()方法。JFrame的构成:
从底层而上:RootPane -- LayerredPane -- ContentPane -- GlassPane
这些面板都可以直接放在JFrame框架内。JFrame是基于AWT模拟而成,一个JFrame框架必须包含一个Pane,然后再在Pane中添加各种组件。每个Pane中可以使用不同的布局管理器。比如new JPanel()默认就使用FlowLayout布局管理器,而JFrame或者RootPane 中默认使用BorderLayout布局管理器,如果取消布局管理器,则必须声明setLayout(null),然后使用setBounds()为各个组件设置位置和大小。 --------------------编程问答--------------------
引用 3 楼  的回复:
等于布局有了一个风格,可以用到很多容器上去;且可以在容器外去设置,更换布局也方便。
container.setLayout(layout)局限在容器内去调用,耦合性稍高;更换布局还要去容器那修改代码。
作用应该是……
恩 有道理 谢谢。 我试了试,发现container.setLayout(layout);也是一样作用的,不过后面得用上 container.validate();
--------------------编程问答--------------------
引用 5 楼  的回复:
引用 3 楼  的回复:
等于布局有了一个风格,可以用到很多容器上去;且可以在容器外去设置,更换布局也方便。
container.setLayout(layout)局限在容器内去调用,耦合性稍高;更换布局还要去容器那修改代码。
作用应该是……
恩 有道理 谢谢。 我试了试,发现container.setLayout(layout);也是一样作用的,不过后面得用上 contain……


layout.layoutContainer() 这个方法,不是让你直接调用的

当布局内的控件有改动或布局器的属性有改动时,为了让布局器重算控件大小和位置,让container重绘,推荐调用的方法是container.revalidate();
补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,