堅持學習java一段時間,最近自己需要做一個小型的系統,所以需要自己將自己的AWT知識鞏固一下。
一、4大布局管理器。
1.邊界布局BorderLayout
是JFrame和JDialog的默認布局方法,可以看成地圖的排列方式,一共四個方位:東西南北和地圖一樣,不同的是上北和下南都沒有中間的位置占有的大,中部的占有最大。
舉例:
package com.ly; import javax.swing.*; import java.awt.*; public class demo1 extends JFrame{ JButton jb1,jb2,jb3,jb4,jb5; public static void main(String[] args) { // TODO Auto-generated method stub demo1 d1=new demo1(); } public demo1() { jb1=new JButton("中"); jb2=new JButton("北"); jb3=new JButton("東"); jb4=new JButton("南"); jb5=new JButton("西"); //添加各個組件 this.add(jb1,BorderLayout.CENTER); this.add(jb2,BorderLayout.NORTH); this.add(jb3,BorderLayout.EAST); this.add(jb4,BorderLayout.SOUTH); this.add(jb5,BorderLayout.WEST); //設置布局 this.setTitle("邊界布局"); this.setSize(300,300); this.setLocation(200,200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } }
2.流式布局FlowLayout
這樣的布局會使部件想水流一樣流動從左到右排列,直到遇到邊界后才重新排列。在Panel中默認使用這種排列方式。
舉例:
package com.ly; import java.awt.FlowLayout; import javax.swing.*; public class Demo2 extends JFrame{ JButton jb1,jb2,jb3,jb4,jb5; public static void main(String[] args) { // TODO Auto-generated method stub Demo2 d2=new Demo2(); } public Demo2() { jb1=new JButton("1"); jb2=new JButton("2"); jb3=new JButton("3"); jb4=new JButton("4"); jb5=new JButton("5"); this.add(jb1); this.add(jb2); this.add(jb3); this.add(jb4); this.add(jb5); //設置布局 this.setLayout(new FlowLayout()); this.setTitle("流布局"); this.pack(); this.setLocation(200,200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } }
3.GridLayout布局管理器
這樣的布局管理將容器分割成縱橫線的網絡。我個人認為這樣的布局方式較上兩種都好,因為更加靈活,寫一些基本的布局都可以轉換。
package com.ly; import java.awt.GridBagLayout; import java.awt.GridLayout; import javax.swing.*; public class Demo3 extends JFrame{ int size=9; JButton []jbs=new JButton[size]; public static void main(String[] args) { // TODO Auto-generated method stub Demo3 d3=new Demo3(); } public Demo3() { for(int i=0;i<size;i++) { jbs[i]=new JButton(String.valueOf(i)); } //設置網格布局 this.setLayout(new GridLayout(3,3)); for(int i=0;i<size;i++) { this.add(jbs[i]); } this.setTitle("網格布局"); this.setSize(300,300); this.setLocation(200,200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } }
4.CardLayout布局器
CardLayout布局器采用時間進行管理組件,可以看層是一個卡片盒,只有最上面的compent可見。
剩下的兩種是我體會比較深的,特別是空布局,簡直萬能,不過就是要自己定位有些麻煩,大家有機會可以試試。
1.null布局
將Container 的布局管理器設置為null,setLayout(null)
再往容器添加時先調用setBounds()和setSize()設置組建大小和位置
2.BoxLayout布局管理器
我沒用過這種管理器,不過這種管理器應該很強大,大家試試。
BoxLayout(Cotainer target,int axis) 而布局有axis橫向排列和
縱向排列
如:f.setLayout(new BoxLayout(f,BoxLayout.y_AXIS));
BoxLayout通常和Box聯合使用
二、AWT的常用組件
直接上程序吧,比較清晰。
1 //AWT基本組件 2 package com.ly.ll; 3 import java.awt.*; 4 import javax.swing.*; 5 6 public class compoment { 7 8 Frame f; //創建窗口 9 Button bt; 10 CheckboxGroup cbg; //復選框組 11 Checkbox male,female,married; //復選框 12 Choice colorChoice; //下拉選框 13 List colorList; //列表選擇框 14 TextArea ta; //文本域(多行) 15 TextField name; //文本域(單行) 16 17 public static void main(String []args) 18 { 19 compoment cp=new compoment(); 20 } 21 22 23 public compoment() 24 { 25 //創建組件 26 f=new Frame("測試界面"); 27 bt=new Button("確認"); 28 cbg=new CheckboxGroup(); 29 male =new Checkbox("男",cbg,true); 30 female =new Checkbox("女",cbg,false); 31 married =new Checkbox("是否已婚?",false); 32 colorChoice=new Choice(); 33 colorList=new List(3,true); 34 ta=new TextArea(5,20); //5行20 列 35 name=new TextField(50); //50列 36 37 //初始化組件 38 colorChoice.add("紅"); 39 colorChoice.add("黃"); 40 colorChoice.add("藍"); 41 colorList.add("紅"); 42 colorList.add("黃"); 43 colorList.add("藍"); 44 //panel裝載文本按鈕 45 Panel bottom=new Panel(); 46 bottom.add(name); 47 bottom.add(bt); 48 f.add(bottom,BorderLayout.SOUTH); //Frame默認邊界布局 49 50 Panel p2=new Panel(); 51 p2.add(colorChoice); 52 p2.add(male); 53 p2.add(female); 54 p2.add(married); 55 56 //創建垂直組件BOX 57 Box topList=Box.createVerticalBox(); 58 topList.add(ta); //放入多航文本域 59 topList.add(p2); 60 61 Box top=Box.createVerticalBox(); 62 top.add(topList); 63 top.add(colorList); 64 f.add(top); 65 f.pack(); 66 67 f.setVisible(true); 68 } 69 }
顯示結果:
這樣就對上面的知識點有了簡單的總結和認識,但是要進行開發還是遠遠不夠的
下面是java實戰.轉(url)
每日一小步,月過一大步~~加油