前几天学到java中的GUI部分,今天就对几种布局管理器做一下总结。
首先就是记住Panel默认的布局管理器是FlowLayout 而Frame默认的布局管理器是BorderLayout 但是都可以通过setlayout()方法来修改
一共有五种布局管理器 分别是
1.BorderLayout边界布局管理器
2.FlowLayout流式布局管理器
3.GridLayout网格布局管理器
4.CardLayout卡片布局管理器
5.GridBagLayout网格包布局管理器
我学的太少了,这里第五种网格包布局管理器还不会用,以后学精细了在来补充吧。今天就对前四种布局管理器做一下总结
首先是BorderLayout布局,Frame默认的布局管理器是BorderLayout 。这就是一个麻将桌一样,上北下南左西右东还有中间。 如果只放一个空间,默认放在中间。用这种布局的窗体,最多就能放五个控件。具体实现如下
package com.awt;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
/*BorderLayout默认有五个位置 每个位置只能放一个组件
*
* */
public class BorderLayoutDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
MyFrame4 frame4=new MyFrame4("BorderLayout");
frame4.init();
}
}
class MyFrame4 extends Frame{
public MyFrame4(String title){
super(title);
}
public void init(){
this.setBackground(Color.CYAN);
this.add(new Button("第一个按钮"));//如果就添加一个组件,默认放在中间
this.add(new Button("第二个按钮"),BorderLayout.WEST);
this.add(new Button("第三个按钮"),BorderLayout.NORTH);
this.add(new Button("第四个按钮"),BorderLayout.CENTER);
this.add(new Button("第五个按钮"),BorderLayout.EAST);
this.setSize(300, 200);//设置窗体的大小
this.setVisible(true);//设置窗体可见
}
}
程序效果就是这样的
package com.awt;
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
public class FlowLayoutDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyFrame3 frame3=new MyFrame3("Flowlayout");
frame3.init();
}
}
class MyFrame3 extends Frame{
public MyFrame3(String title){
super(title);
}
public void init(){
//默认的边界布局 BorderLayout 现在设置成流式布局,new一个流式布局的对象,传入setlayout方法中中
FlowLayout layout=new FlowLayout(FlowLayout.LEFT,50,50);//构造方法参数若为空,默认从中间开始排列,现在设置成左对齐。
//几个参数是静态的,所以可以类名点属性名 后面两个参数分别是垂直和水平间隙
this.setLayout(layout);
this.setBackground(Color.CYAN);
this.add(new Button("btn1"));
this.add(new Button("btn2"));
this.add(new Button("btn3"));
this.add(new Button("btn4"));
this.add(new Button("btn5"));
this.add(new Button("btn6"));;
this.setSize(300, 200);
this.setVisible(true);
}
}
程序效果就是这样的
GridLayout网格布局管理器。这个要设置几行几列的,还是比较好用的。具体实现如下
package com.awt;
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
public class GridLayoutDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyFrame5 frame5=new MyFrame5("Flowlayout");
frame5.init();
}
}
class MyFrame5 extends Frame{
public MyFrame5(String title){
super(title);
}
public void init(){
//默认的边界布局 BorderLayout 现在设置成网格布局,new一个网格布局的对象,传入setlayout方法中
GridLayout layout=new GridLayout(3,2);//构造方法参数若为空,默认每个组件占据一行一列
//两个参数的时候,表示几行几列
//四个参数的时候,前面表示几行几列,后面两个表示垂直和水平的间隙
this.setLayout(layout);
this.setBackground(Color.CYAN);
this.add(new Button("btn1"));
this.add(new Button("btn2"));
this.add(new Button("btn3"));
this.add(new Button("btn4"));
this.add(new Button("btn5"));
this.add(new Button("btn6"));
this.setSize(300, 200);
this.setVisible(true);
}
}
程序效果就是这样的
最后一个CardLayout卡片布局管理器是稍微难一点的,就是添加在上面的东西都像卡片一样重叠起来的。默认只能看到最上面一个。下面的程序要用到按钮的监听器,点击下一张,才会看到下一个东西。
package com.awt;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
public class CardLayoutDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyFrame6 frame6=new MyFrame6("Cardlayout");
frame6.init();
}
}
class MyFrame6 extends Frame{
private Panel card_panel=null;
private Panel ctrol_panel=null;
private CardLayout cardLayout=null;
private FlowLayout flowLayout=null;
private Button btn_first,btn_previous,btn_last,btn_next;
private Label lb_1,lb_2,lb_3,lb_4;
private TextField tf_content;
public MyFrame6(String title){
super(title);
}
public void init(){
//创建两个面板容器
card_panel=new Panel();
ctrol_panel=new Panel();
//创建两个布局管理器
flowLayout=new FlowLayout();
cardLayout=new CardLayout();
//给容器设置布局管理器
card_panel.setLayout(cardLayout);
ctrol_panel.setLayout(flowLayout);
//声明和创建四个标签和一个文本框空间
lb_1=new Label("第一页内容",Label.CENTER);//标签中的文字居中
lb_2=new Label("第二页内容",Label.CENTER);
tf_content=new TextField();//编辑文本框
lb_3=new Label("第四页内容",Label.CENTER);
lb_4=new Label("第五页内容",Label.CENTER);
//创建四个按钮对象
btn_first=new Button("第一张");
btn_previous=new Button("上一张");
btn_next=new Button("下一张");
btn_last=new Button("最后一张");
//把四个标签和一个文本框空间添加到card_panel中
card_panel.add(lb_1);
card_panel.add(lb_2);
card_panel.add(tf_content);
card_panel.add(lb_3);
card_panel.add(lb_4);
//把按钮添加到ctorl_panel中
ctrol_panel.add(btn_first);
ctrol_panel.add(btn_previous);
ctrol_panel.add(btn_next);
ctrol_panel.add(btn_last);
this.add(card_panel,BorderLayout.CENTER);
this.add(ctrol_panel,BorderLayout.SOUTH);
this.setSize(400, 300);
this.setVisible(true);
}
}
程序效果就是这样的