组件的布局

各组件的默认布局

  • Appelt、Panel
    默认为FlowLayout布局
  • Frame、Dialog
    默认为BorderLayout布局

布局的类型

顺序布局(FlowLayout)

Panel、Applet的默认类型

  • 效果

  • 代码

/*顺序 布局 */
import java.awt.*;
import java.awt.event.*;//AvctrionListener,AvctionEvent
public class sample65 extends Frame
{
	sample65()
	{
		setTitle("FlowLayout布局");
		setLayout(new FlowLayout(FlowLayout.LEFT,20,60));//左对齐,水平间距20,垂直间隔60,顺序布局(container类)
		setBackground(Color.green);
		Panel pnl = new Panel();
		pnl.setBackground(Color.blue);
		add(pnl);
		pnl.setSize(400,400);
		setVisible(true);
		pnl.add(new Button("按键1"));
		pnl.add(new Button("按键2"));
		pnl.add(new Button("按键3"));
		pnl.add(new Button("按键4"));
		pack();
		addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e)
			{
				setVisible(false);
				System.exit(0);
			}			
			});
	}
	public static void main(String args[])
	{
		sample65 smp = new sample65();
	}	
}
  • 解析
    setLayout(new FlowLayout(FlowLayout.LEFT,20,60));
    左对齐,水平间距20,垂直间隔60,顺序布局(container类)

边界布局(BoardLayout)

Frame、Dialog的默认布局

  • 效果

  • 代码

/*边界 布局 */
import java.awt.*;
import java.awt.event.*;//AvctrionListener,AvctionEvent
public class sample66 extends Frame
{
	sample66()
	{
		super("BorderLayout布局");
		setBackground(Color.green);
		setVisible(true);
		add(new Button("按键1"),"East");//靠东
		add(new Button("按键2"),"West");
		add(new Button("按键3"),"South");
		add(new Button("按键4"),"North");
		add(new Button("按键5"),"Center");
		pack();
		addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e)
			{
				setVisible(false);
				System.exit(0);
			}			
			});
	}
	public static void main(String args[])
	{
		sample66 smp = new sample66();
	}	
}
  • 解析
add(new Button("按键1"),"East");//靠东
add(new Button("按键2"),"West");
add(new Button("按键3"),"South");
add(new Button("按键4"),"North");
add(new Button("按键5"),"Center");

关键步骤。

网格布局(GridLayout)

  • 效果

  • 代码

/*网格 布局 */
import java.awt.*;
import java.awt.event.*;//AvctrionListener,AvctionEvent
public class sample67 extends Frame
{
	sample67()
	{
		super("GridLayout布局");
		setBackground(Color.green);
		setLayout(new GridLayout(3,2));//3行2列
		setVisible(true);
		add(new Button("按键1"));
		add(new Button("按键2"));
		add(new Button("按键3"));
		add(new Button("按键4"));
		add(new Button("按键5"));
		pack();
		addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e)
			{
				setVisible(false);
				System.exit(0);
			}			
			});
	}
	public static void main(String args[])
	{
		sample67 smp = new sample67();
	}	
}
  • 解析
    setLayout(new GridLayout(3,2));//3行2列
    三行两列

网格袋布局(GridBagConstraints)

  • 效果

  • 代码

/*网格袋布局 */
import java.awt.*;
import java.awt.event.*;//AvctrionListener,AvctionEvent
public class sample68 extends Frame implements ActionListener
{
	Button btn;
	sample68()
	{
		super("GridBagConstraints 布局");
		setBackground(Color.green);
		GridBagLayout gridbag = new GridBagLayout();
		GridBagConstraints c = new GridBagConstraints();
		setLayout(gridbag);
		c.fill = GridBagConstraints.BOTH;
		makebutton("Button0",gridbag,c);
//		btn.addActionListener(this);			//此处按键无作用
		makebutton("Button1",gridbag,c);
		makebutton("Button2",gridbag,c);
		makebutton("Button3",gridbag,c);
		c.gridwidth = GridBagConstraints.REMAINDER;//REMAINDER:后面的按键4必须是这行最后一个
		makebutton("Button4",gridbag,c);
		c.gridwidth = 2;							//Button5的宽度:2个按键
		makebutton("Button5",gridbag,c);
		c.gridwidth = 1;
		makebutton("Button51",gridbag,c);
		c.gridwidth = GridBagConstraints.REMAINDER;
		makebutton("Button52",gridbag,c);
		c.gridwidth = GridBagConstraints.RELATIVE;//RELATIVE:Button6为倒数第二个组件
		makebutton("Button6",gridbag,c);
		c.gridwidth = GridBagConstraints.REMAINDER;
		makebutton("Button7",gridbag,c);
		c.gridwidth = 1;
		c.gridheight = 2;
		makebutton("Button8",gridbag,c);
		c.gridwidth = GridBagConstraints.REMAINDER;
		c.gridheight = 2;
		makebutton("Button9",gridbag,c);
		makebutton("退出",gridbag,c);	
		setVisible(true);
		pack();
		btn.addActionListener(this);
		addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e)
			{
				setVisible(false);
				System.exit(0);
			}			
			});
	}
	protected void makebutton(String name,GridBagLayout gridbag,GridBagConstraints c)
	{
		btn = new Button(name);
		gridbag.setConstraints(btn,c);
		add(btn);
	}
	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource() == btn)
		{	
			System.exit(0);
		}	
	}
	public static void main(String args[])
	{
		sample68 smp = new sample68();
	}	
}

null布局

  • 效果

  • 代码

/*null布局 */
import java.awt.*;
import java.awt.event.*;//AvctrionListener,AvctionEvent
public class sample69 extends Frame
{
	Button btn1,btn2,btn3,btn4;
	Panel pnl;
	sample69()
	{
		super("null	布局");
		setBounds(400,100,300,300);
		pnl = new Panel();
		add(pnl);
		pnl.setBackground(Color.black);
		setLayout(null);//此步删除后,按键4充满整个面板
		btn1 = new Button("按键1");
		btn2 = new Button("按键2");
		btn3 = new Button("按键3");
		btn4 = new Button("按键4");
		setVisible(true);
		add(btn1);
		add(btn2);
		add(btn3);
		add(btn4);
		pnl.setBounds(20,40,200,190);
		btn1.setBounds(230,60,40,20);
		btn2.setBounds(230,90,40,20);
		btn3.setBounds(230,120,40,20);
		btn4.setBounds(230,150,40,20);
		addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e)
			{
				setVisible(false);
				System.exit(0);
			}			
			});
	}
	public static void main(String args[])
	{
		sample69 smp = new sample69();
	}	
}
  • 解析
    setLayout(null);
    此步删除后,按键4充满整个面板

卡片布局(CardLayout)

  • 效果

  • 代码

/*卡片(CardLayout)布局 */
/* 第一个添加到 CardLayout 对象的组件为可见组件。*/
import java.awt.*;
import java.awt.event.*;//AvctrionListener,AvctionEvent
public class sample610 extends Frame implements ActionListener
{
	static Panel pnl = new Panel();
	static CardLayout crd = new CardLayout(20,15);
	Button btn1 = new Button("First Cav");
	Button btn2 = new Button("Last Cav");
	Button btn3 = new Button("Previous Cav");
	Button btn4 = new Button("Next Cav");
	Cvs cvs[] = new Cvs[10];
	
	sample610()
	{
		super("CardLayout 布局");
		setSize(350,250);//frame的大小
		setBackground(Color.green);
		setVisible(true);
		setLayout(null);//设置窗口为null布局
		pnl.setBackground(Color.blue);
		pnl.setBounds(0,40,200,190);
		pnl.setLayout(crd);//设置面板为cardlayout布局
		add(pnl);
		setVisible(true);
		add(btn1);
		add(btn2);
		add(btn3);
		add(btn4);
		pnl.setBounds(20,40,200,190);
		btn1.setBounds(230,60,80,20);
		btn2.setBounds(230,90,80,20);
		btn3.setBounds(230,120,80,20);
		btn4.setBounds(230,150,80,20);
		for(int k=0 ; k < 10 ; k++)
		{
			cvs[k] = new Cvs(k);
//			pnl.add(""+k,cvs[k]);//”“+k表示将k和空字符相连,添加name = ”k”、comp = cvs[8]的画布,有卵用?
			pnl.add(cvs[k]);
		}
		btn1.addActionListener(this);
		btn2.addActionListener(this);
		btn3.addActionListener(this);
		btn4.addActionListener(this);
		
		addWindowListener(
			new WindowAdapter(){
				public void windowClosing(WindowEvent e){
					setVisible(false);
					System.exit(0);}});
	}
	
	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource() == btn1)
		{
			crd.first(pnl);
		}
		else if(e.getSource() == btn2)
		{
			crd.last(pnl);
		}
		else if(e.getSource() == btn3)
		{
			crd.previous(pnl);
		}
		else if(e.getSource() == btn4)
		{
			crd.next(pnl);
		}
	}
	class Cvs extends Canvas
	{
		int i; 
		Cvs(int j)
		{
			i = j;
			setBackground(Color.yellow);
		}
		public void paint(Graphics g)     //paint自动执行
		{
			g.setColor(Color.red);//用红色设置矩形的颜色
			g.fillRect(30,25,10+10*i,8+8*i);//用该颜色填充矩形
			g.drawString("这是第" + (i+1) + "个画面",20,150);//画布的文字
		}
	}
	
	public static void main(String args[])
	{
		sample610 smp = new sample610();
		crd.first(pnl);   //容器为pnl
	}	
}

我的微博:Neyzoter
我的新浪博客:NeyzoterSong

posted on 2016-02-28 14:37  NeyzoterSong  阅读(341)  评论(0)    收藏  举报

导航