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,垂直间距为30 f.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()); // 设置窗体中的布局管理器为BorderLayout f.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; // 设置横向权重为1 c.weighty = 1; // 设置纵向权重为1 this.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; // 设置横向权重为0 c.weighty = 0; // 设置纵向权重为0 addComponent("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; // 设置横向权重为2 c.weighty = 2; // 设置纵向权重为2 this.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