布局管理器与控制反转
布局管理器
组件在容器(比如JFrame)中的位置和大小是由布局管理器来决定的。所有的容器都会使用一个布局管理器,通过它来自动进行组件的布局管理。
java共提供了五种布局管理器:流式布局管理器(FlowLayout)、边界布局管理器(BorderLayout)、网格布局管理器(GridLayout)、卡片布局管理器(CardLayout)、网格包布局管理器(GridBagLayout)。其中,前三种是最常见的布局管理器。
边界布局BorderLayout
边界布局将容器简单的划分为东南西北中5个区域,中间区域最大。边界布局是JFrame窗体、JDialog对话框组件默认布局方法
边界布局,(1)不是五个部分都需要添加的;(2)中部组件会自动的调节大小。
/** * BorderLayout演示 * 1.继承JFrame * 2.定义需要的组件 * 3.创建组件(构造函数) * 4.添加组件 * 5.对窗体设置 * 6.显示窗体 */ package demo02.clock.Test30; import java.awt.*; import javax.swing.*; public class Test30_1 extends JFrame{ // 定义组件 JButton jb1, jb2, jb3, jb4, jb5; public static void main(String[] args) { Test30_1 test30_1 = new Test30_1(); } public Test30_1() { //创建组件 jb1 = new JButton("中部"); jb2 = new JButton("北部"); jb3 = new JButton("东部"); jb4 = new JButton("南部"); jb5 = new JButton("西部"); // 添加各个组件 this.add(jb1, BorderLayout.CENTER); this.add(jb2, BorderLayout.NORTH); this.add(jb3, BorderLayout.EAST); this.add(jb4, BorderLayout.SOUTH); this.add(jb5, BorderLayout.WEST); //设置窗体属性 this.setTitle("边界布局示例"); this.setSize(300,300); this.setLocation(200,200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //显示 this.setVisible(true); } }
什么叫控制反转
控制反转即IoC (Inversion of Control),它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器。
控制反转有什么作用
管理对象的创建和依赖关系的维护。对象的创建并不是一件简单的事,在对象关系比较复杂时,如果依赖关系需要程序猿来维护的话,那是相当头疼的
解耦,由容器去维护具体的对象
托管了类的产生过程,比如我们需要在类的产生过程中做一些处理,最直接的例子就是代理,如果有容器程序可以把这部分处理交给容器,应用程序则无需去关心类是如何完成代理的
控制反转是这么分类的
控制反转IoC是一个很大的概念,可以用不同的方式来实现。其主要实现方式有两种:依赖注入和依赖查找
依赖注入:
更加准确地描述了IoC的设计理念。所谓依赖注入,即组件之间的依赖关系由容器在应用系统运行期来决定,也就是由容器动态地将某种依赖关系的目标对象实例注入到应用系统中的各个关联的组件之中。组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。
依赖查找:容器提供回调接口和上下文环境给组件。EJB和Apache Avalon都使用这种方式。
依赖查找也有两种类型:依赖拖拽和上下文化依赖查找。