java布局管理器

来源:互联网 发布:扫街软件 编辑:程序博客网 时间:2024/06/16 01:46

java布局管理器

1、FlowLayout

流式布局管理器是最简单的布局管理器,在这种布局下,容器会将组件按照添加顺序从左向右放置。当到达容器的边界时,会自动将组件放到下一行的开始位置。这些组件可以左对齐、居中对齐(默认方式)或右对齐的方式排列。具体可以通过javaAPI查看.

下面我来用案例来演示一下

package cn.itcast.chapter08.example02;import java.awt.*;public class Example02 {public static void main(String[] args) {final Frame f = new Frame("Flowlayout");// 创建一个名为Flowlayout的窗体// 设置窗体中的布局管理器为FlowLayout,所有组件左对齐,水平间距为20,垂直间距为30f.setLayout(new FlowLayout(FlowLayout.LEFT, 20, 30));f.setSize(220, 300); // 设置窗体大小f.setLocation(300, 200); // 设置窗体显示的位置f.add(new Button("第1个按钮")); // 把"第1个按钮"添加到f窗口f.add(new Button("第2个按钮"));f.add(new Button("第3个按钮"));f.add(new Button("第4个按钮"));f.add(new Button("第5个按钮"));f.add(new Button("第6个按钮"));f.setVisible(true); // 设置窗体可见}}

2、BorderLayout

边界布局管理器是一种较为复杂的布局方式,它将容器划分为五个区域,分别是东(EAST)、南(SOUTH)、西(WEST)、北(NORTH)、中(CENTER),组件可以直接被放置在这5个区域中的任意一个。

接下来通过一个案例来演示一下

package cn.itcast.chapter08.example03;import java.awt.*;public class Example03 {public static void main(String[] args) {final Frame f = new Frame("BorderLayout");// 创建一个名为BorderLayout的窗体f.setLayout(new BorderLayout()); // 设置窗体中的布局管理器为BorderLayoutf.setSize(300, 300); // 设置窗体大小f.setLocation(300, 200);// 设置窗体显示的位置f.setVisible(true); // 设置窗体可见// 下面的代码是创建5个按钮,分别用于填充BorderLayout的5个区域Button but1 = new Button("东部"); // 创建新按钮Button but2 = new Button("西部");Button but3 = new Button("南部");Button but4 = new Button("北部");Button but5 = new Button("中部");// 下面的代码是将创建好的按钮添加到窗体中,并设置按钮所在的区域f.add(but1, BorderLayout.EAST); // 设置按钮所在区域f.add(but2, BorderLayout.WEST);f.add(but3, BorderLayout.SOUTH);f.add(but4, BorderLayout.NORTH);f.add(but5, BorderLayout.CENTER);}}

3、GridLayout

网格布局管理器使用纵横线将容器分成n行m列大小相等的网络,每个网格中放置一个组件。

与FloeLayout不同的是,放置在GridLayout布局管理器中的组件将自动占据网格的整个区域。

案例演示:

package cn.itcast.chapter08.example04;import java.awt.*;public class Example04 {public static void main(String[] args) {Frame f = new Frame("GridLayout");// 创建一个名为GridLayout的窗体f.setLayout(new GridLayout(3, 3));// 设置该窗体为3*3的网格f.setSize(300, 300); // 设置窗体大小f.setLocation(400, 300);// 下面的代码是循环添加9个按钮到GridLayout中for (int i = 1; i <= 9; i++) {Button btn = new Button("btn" + i);f.add(btn); // 向窗体中添加按钮}f.setVisible(true);}}


4、GridBagLayout

网格包布局管理器是最灵活、最复杂的布局管理器。与GridLayout布局管理器类似,不同的是,它允许网格中的组件大小各不相同,而且允许一个组件跨越一个或者多个网格。

案例演示:

package cn.itcast.chapter08.example05;import java.awt.*;class Layout extends Frame {public Layout(String title) {GridBagLayout layout = new GridBagLayout();GridBagConstraints c = new GridBagConstraints();this.setLayout(layout);c.fill = GridBagConstraints.BOTH; // 设置组件横向纵向可以拉伸c.weightx = 1; // 设置横向权重为1c.weighty = 1; // 设置纵向权重为1this.addComponent("btn1", layout, c);this.addComponent("btn2", layout, c);this.addComponent("btn3", layout, c);c.gridwidth = GridBagConstraints.REMAINDER; // 添加的组件是本行最后一个组件this.addComponent("btn4", layout, c);c.weightx = 0; // 设置横向权重为0c.weighty = 0; // 设置纵向权重为0addComponent("btn5", layout, c);c.gridwidth = 1; // 设置组件跨一个网格(默认值)this.addComponent("btn6", layout, c);c.gridwidth = GridBagConstraints.REMAINDER; // 添加的组件是本行最后一个组件this.addComponent("btn7", layout, c);c.gridheight = 2; // 设置组件纵向跨两个网格c.gridwidth = 1; // 设置组件横向跨一个网格c.weightx = 2; // 设置横向权重为2c.weighty = 2; // 设置纵向权重为2this.addComponent("btn8", layout, c);c.gridwidth = GridBagConstraints.REMAINDER;c.gridheight = 1;this.addComponent("btn9", layout, c);this.addComponent("btn10", layout, c);this.setTitle(title);this.pack();this.setVisible(true);}// 增加组件的方法private void addComponent(String name, GridBagLayout layout,GridBagConstraints c) {Button bt = new Button(name); // 创建一个名为name的按钮layout.setConstraints(bt, c); // 设置GridBagConstraints对象和按钮的关联this.add(bt); // 增加按钮}}public class Example05 {public static void main(String[] args) {new Layout("GridBagLayout");}}

5、CardLayout

在操作程序中,经常会遇到通过选项卡按钮来切换程序中的界面,这些界面就相当于一张张卡片,而管理这些卡片的布局管理器。卡片布局管理器将界面看做是一系列卡片,在任何时候只有其中一张卡片是可见的,这张卡片占据容器的整个区域。

package cn.itcast.chapter08.example06;import java.awt.*;import java.awt.event.*;//定义Cardlayout继承Frame类,实现ActionListener接口class Cardlayout extends Frame implements ActionListener {Panel cardPanel = new Panel(); // 定义Panel面板放置卡片Panel controlpaPanel = new Panel(); // 定义Panel面板放置按钮Button nextbutton, preButton;       //声明两个按钮CardLayout cardLayout = new CardLayout();// 定义卡片布局对象// 定义构造方法,设置卡片布局管理器的属性public Cardlayout() { setSize(300, 200);setVisible(true);// 为窗口添加关闭事件监听器this.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {Cardlayout.this.dispose();}});cardPanel.setLayout(cardLayout); // 设置cardPanel面板对象为卡片布局// 在cardPanel面板对象中添加3个文本标签cardPanel.add(new Label("第一个界面", Label.CENTER));cardPanel.add(new Label("第二个界面", Label.CENTER));cardPanel.add(new Label("第三个界面", Label.CENTER));// 创建两个按钮对象nextbutton = new Button("下一张卡片");preButton = new Button("上一张卡片");// 为按钮对象注册监听器nextbutton.addActionListener(this);preButton.addActionListener(this);// 将按钮添加到controlpaPanel中controlpaPanel.add(preButton);controlpaPanel.add(nextbutton);// 将cardPanel面板放置在窗口边界布局的中间,窗口默认为边界布局this.add(cardPanel, BorderLayout.CENTER);// 将controlpaPanel面板放置在窗口边界布局的南区,this.add(controlpaPanel, BorderLayout.SOUTH);}// 下面的代码实现了按钮的监听触发,并对触发事件做出相应的处理public void actionPerformed(ActionEvent e) {// 如果用户单击nextbutton,执行的语句if (e.getSource() == nextbutton) {// 切换cardPanel面板中当前组件之后的一个组件,若当前组件为最后一个组件,则显示第一个组件。cardLayout.next(cardPanel);}if (e.getSource() == preButton) {// 切换cardPanel面板中当前组件之前的一个组件,若当前组件为第一个组件,则显示最后一个组件。cardLayout.previous(cardPanel);}}}public class Example06 {public static void main(String[] args) {Cardlayout cardlayout = new Cardlayout();}}

6、不使用布局管理器

当一个容器被创建后,它们都会有一个默认的布局管理器。Window、Frame和Dialog的默认布局管理器是BorderLayout,Panel的默认布局管理器是FlowLayout。如果不希望通过布局管理器来对容器进行布局,也可以调用容器的setLayout(null)方法,将布局管理器取消。在这种情况下,程序必须调用容器中每个组件的setSize()和setLocation()方法或者是setBounds()方法(这个方法接受四个参数,分别是左上角的x、y坐标和组件的长、宽)来为这些组件在容器中定位。

详情请看代码演示

package cn.itcast.chapter08.example07;import java.awt.*;public class Example07 {public static void main(String[] args) {Frame f = new Frame("hello");f.setLayout(null); // 取消 frame的布局管理器f.setSize(300, 150);Button btn1 = new Button("press");Button btn2 = new Button("pop");btn1.setBounds(40, 60, 100, 30);btn2.setBounds(140, 90, 100, 30);// 在窗口中添加按钮f.add(btn1);f.add(btn2);f.setVisible(true);}}


上面描述就布局管理器的几种类型,并附上了详细的代码
其中具体的方法没有介绍,详细信息JavaAPI可以进行查找


愿您看完能够理解
生活更美好

不小心敲到了23:28






原创粉丝点击