你的位置:首页 > Java教程

[Java教程]AWT布局管理器


布局管理器

容器内可以存放各种组件,而组件的位置和大小是由容器内的布局管理器来决定的。在AWT中为我们提供了以下5种布局管理器:

①   FlowLayout 流式布局管理器

②   BorderLayout 边界布局管理器

③   GridLayout 网格布局管理器

④   CradLayout 卡片布局管理器

⑤   GridBagLayout 网格包布局管理器

 

容器中组件的布局通常由布局管理器控制。每个Container(比如一个Panel或一个Frame)都有一个与他相关的缺省布局管理器,Panel容器默认的是FlowLayout,Frame容器默认的是BorderLayout,我们可以通过调用setLayout()来改变布局管理器;

可以通过设置空布局管理器,来控制组件的大小金和位置。可以调用setLayout(null)。

在设置空布局管理器后,必须对所有的组件调用setLocation(),setSize()或setBounds(),将它们定位在容器中。

 

流式布局管理器

 1 class MyFrame3 extends Frame { 2   public MyFrame3(String title) { 3     super(title); 4   } 5  6   public void init() { 7     FlowLayout layout=new FlowLayout(FlowLayout.LEFT);//设置左对齐 8     this.setLayout(layout); 9     this.setBackground(Color.CYAN);10     this.add(new Button("btn1"));11     this.add(new Button("btn2"));12     this.add(new Button("btn3"));13     this.add(new Button("btn4"));14     this.add(new Button("btn5"));15     this.add(new Button("btn6"));16     this.add(new Button("btn7"));17     this.add(new Button("btn8"));18     this.setSize(300, 300);19     this.setVisible(true);20   }21 }

 

边界布局管理器

 1 class MyFrame4 extends Frame { 2   public MyFrame4(String title) { 3     super(title); 4   } 5  6   public void init() { 7     this.setBackground(Color.CYAN); 8     this.add(new Button("btn1"),BorderLayout.EAST); 9     this.add(new Button("btn2"),BorderLayout.WEST);10     this.add(new Button("btn3"),BorderLayout.NORTH);11     this.add(new Button("btn4"),BorderLayout.SOUTH);12     this.add(new Button("btn5"),BorderLayout.CENTER);13     this.setSize(300, 300);14     this.setVisible(true);15   }16 }

 

网格布局管理器

 1 class MyFrame5 extends Frame { 2   public MyFrame5(String title) { 3     super(title); 4   } 5  6   public void init() { 7     GridLayout layout=new GridLayout(3,2);//创建一个3行2列的网格 8     this.setLayout(layout); 9     this.setBackground(Color.CYAN);10     this.add(new Button("btn1"));11     this.add(new Button("btn2"));12     this.add(new Button("btn3"));13     this.add(new Button("btn4"));14     this.add(new Button("btn5"));15     this.setSize(300, 300);16     this.setVisible(true);17   }18 }

 

卡片布局管理器

 1 class MyFrame6 extends Frame { 2   private Panel cardPanel=null; 3   private Panel ctrolPanel=null; 4   private CardLayout cardLayout=null; 5   private FlowLayout flowLayout=null; 6   private Label lb1,lb2,lb3,lb4; 7   private Button btnFirst,btnPrevious,btnNext,btnLast; 8   private TextField txtContent; 9   public MyFrame6(String title) {10     super(title);11   }12 13   public void init() {14     //创建2个面板容器15     cardPanel=new Panel();16     ctrolPanel=new Panel();17     18     //创建2个布局管理器19     cardLayout=new CardLayout();20     flowLayout=new FlowLayout();21     22     //给容器设置指定的布局管理器23     cardPanel.setLayout(cardLayout);//卡片容器中放置卡片布局24     ctrolPanel.setLayout(flowLayout);//控制容器放置流式布局25     26     //声明创建4个标签控件和一个文本框控件27     lb1=new Label("第一页内容",Label.CENTER);28     lb2=new Label("第二页内容",Label.CENTER);29     txtContent=new TextField();//编辑文本框30     lb3=new Label("第四页内容",Label.CENTER);31     lb4=new Label("第五页内容",Label.CENTER);32     33     //构建四个按钮对象34     btnFirst=new Button("第一张");35     btnPrevious=new Button("上一张");36     btnNext=new Button("下一张");37     btnLast=new Button("最后一张");38     ctrolPanel.add(btnFirst);39     ctrolPanel.add(btnPrevious);40     ctrolPanel.add(btnNext);41     ctrolPanel.add(btnLast);42     43     //把四个标签控件和一个文本框控件添加到卡片容器中44     cardPanel.add(lb1);45     cardPanel.add(lb2);46     cardPanel.add(txtContent);47     cardPanel.add(lb3);48     cardPanel.add(lb4);49     this.add(cardPanel,BorderLayout.CENTER);//将卡片容器放在中部50     this.add(ctrolPanel,BorderLayout.SOUTH);//将控制容器放在南部51     this.setSize(400, 300);52     this.setVisible(true);53   }54 }