全部的能夠顯示出來的圖形元素都稱爲Component,Component表明了全部的可見的圖形元素,Component裏面有一種比較特殊的圖形元素叫Container,Container(容器)在圖形界面裏面是一種能夠容納其它Component元素的一種容器,Container自己也是一種Component的,Container裏面也能夠容納別的Container。java
Container裏面又分爲Window和Pannel,Window是能夠獨立顯示出來的,平時咱們看到的各類各樣的應用程序的窗口均可以稱爲Window,Window做爲一個應用程序窗口獨立顯示出來,Pannel也能夠容納其它的圖形元素,但通常看不見Pannel,Pannel不能做爲應用程序的獨立窗口顯示出來,Pannel要想顯示出來就必須得把本身裝入到Window裏面才能顯示出來。編程
Pannel應用比較典型的就是Applet(JAVA的頁面小應用程序),如今基本上已經不用了,AJAX和JAVASCRIPT徹底取代了它的應用。佈局
Window自己又能夠分爲Frame和Dialog,Frame就是咱們平時看到的通常的窗口,而Dialog則是那些須要用戶進行了某些操做(如點擊某個下拉菜單的項)纔出現的對話框,這種對話框就是Dialog。學習
Frame範例:測試
1 package cn.javastudy.summary; 2 3 /**學習JAVA的GUI編程編寫的第一個圖形界面窗口*/ 4 import java.awt.*; 5 6 public class TestFrame { 7 public static void main(String args[]) { 8 Frame f = new Frame("個人第一個JAVA圖形界面窗口"); 9 /* 10 * 這裏只是在內存裏面建立了一個窗口對象 還不能真正顯示出來然咱們看到 11 */ 12 f.setBackground(Color.blue);// 設置窗體的背景顏色 13 // blue是Color類裏面的一個靜態常量,可使用「類名.靜態常量名」來訪問 14 f.setVisible(true);// 設置窗體是否可見 15 /* 16 * 要想看到在內存裏面建立出來的窗口對象, 必須調用setVisble()方法,而且把參數true傳入才能看得見窗體 若是傳入的參數是false,那麼窗體也是看不見的 17 */ 18 f.setSize(400, 400);// 設置窗體的初始大小 19 f.setLocation(200, 200);// 設置窗體出現時的位置,若是不設置則默認在左上角(0,0)位置顯示 20 f.setResizable(false); 21 /* 22 * 設置窗體可否被改變大小,設置爲false後表示不能改變窗體的顯示大小 這裏將窗體顯示的大小設置爲200X200,那麼窗體的顯示只能是這個大小了,不能再使用鼠標拖大或者縮小 23 */ 24 } 25 }
運行結果以下:spa
1 package cn.javastudy.summary; 2 3 import java.awt.*; 4 public class TestMultiFrame{ 5 public static void main(String args[]){ 6 MyFrame f1 = new MyFrame(100,100,200,200,Color.BLUE); 7 MyFrame f2 = new MyFrame(300,100,200,200,Color.YELLOW); 8 MyFrame f3 = new MyFrame(100,300,200,200,Color.GREEN); 9 MyFrame f4 = new MyFrame(300,300,200,200,Color.MAGENTA); 10 } 11 } 12 /*自定義一個類MyFrame,而且從Frame類繼承 13 這樣MyFrame類就擁有了Frame類的一切屬性和方法 14 而且MyFrame類還能夠自定義屬性和方法 15 所以使用從Frame類繼承而來的自定義類來建立圖形窗口比直接使用Frame類來建立圖形窗口要靈活 16 因此通常使用從Frame類繼承而來的自定義類建立圖形窗口界面比較好, 17 不推薦直接使用Frame類來建立圖形窗口界面 18 */ 19 class MyFrame extends Frame{ 20 static int id = 0; 21 //定義一個靜態成員變量id,用來記錄建立出來的窗口的數目 22 MyFrame(int x,int y,int w,int h,Color color){ 23 //自定義構成方法,在構造方法體內使用super調用父類Frame的構造方法 24 super("MyFrame"+(++id)); 25 setBackground(color); 26 /*使用從父類Frame繼承而來的方法設置窗體的相關屬性*/ 27 setLayout(null); 28 setBounds(x,y,w,h); 29 setVisible(true); 30 } 31 }
運行結果:code
Panel範例:對象
1 package cn.javastudy.summary; 2 3 import java.awt.*; 4 public class TestPanel{ 5 public static void main(String args[]){ 6 Frame f = new Frame("JAVA Fram With Panel"); 7 Panel p = new Panel(null); 8 f.setLayout(null); 9 f.setBounds(300,300,500,500);//這裏設置的座標(300,300)是相對於整個屏幕的 10 f.setBackground(new Color(0,0,102));//設置背景顏色時使用三基色(紅,綠,藍)的比例來調配背景色 11 p.setBounds(50,50,400,400);//這裏設置的座標(50,50)是相對於Frame窗體的 12 p.setBackground(new Color(204,204,255)); 13 f.add(p);//把Panel容器裝入到Frame容器中,使其能在Frame窗口中顯示出來 14 f.setVisible(true); 15 } 16 }
運行結果以下:blog
測試代碼:繼承
1 package cn.javastudy.summary; 2 3 import java.awt.*; 4 5 public class TestFlowLayout { 6 public static void main(String args[]) { 7 Frame f = new Frame("FlowLayout"); 8 /* 9 * 使用Button類建立按鈕 按鈕類的其中一個構造方法:Button(String label) label爲按鈕顯示的文本 10 */ 11 Button btn1 = new Button("button1"); 12 Button btn2 = new Button("button2"); 13 Button btn3 = new Button("button3"); 14 /* setLayout方法的定義:public void setLayout(LayoutManager mgr) */ 15 f.setLayout(new FlowLayout());// 使用流水(Flow)線般的佈局 16 /* 使用了佈局管理器FlowLayout,這裏的佈局採用默認的水平居中模式 */ 17 // f.setLayout(new FlowLayout(FlowLayout.LEFT)); 18 /* 這裏在佈局的時候使用了FlowLayout.LEFT常量,這樣就將按鈕設置爲左對齊 */ 19 // f.setLayout(new FlowLayout(FlowLayout.RIGHT)); 20 /* 這裏在佈局的時候使用了FlowLayout.RIGHT常量,這樣就將按鈕設置爲右對齊 */ 21 f.add(btn1);// 把建立出來的按鈕放置到Frame窗體中 22 f.add(btn2); // 這裏並無設置按鈕的大小與位置 23 f.add(btn3); // 設置按鈕的大小與位置都是由佈局管理器來作的 24 f.setVisible(true); 25 f.setSize(200, 200); 26 } 27 }
運行結果以下:
測試代碼:
1 package cn.javastudy.summary; 2 3 import java.awt.*; 4 5 public class TestBorderLayout { 6 public static void main(String args[]) { 7 Frame f = new Frame("BorderLayout"); 8 Button btnEast = new Button("East"); 9 Button btnWest = new Button("West"); 10 Button btnSouth = new Button("South"); 11 Button btnNorth = new Button("North"); 12 Button btnCenter = new Button("Center"); 13 /* 14 * 把按鈕放置到Frame窗體時按照東西南北中五個方向排列好 推薦使用這種方式去排列窗體元素, 15 * 這樣容易檢查出錯誤 由於這樣寫若是寫錯了編譯器會提示出錯 16 */ 17 f.add(btnEast, BorderLayout.EAST); 18 f.add(btnWest, BorderLayout.WEST); 19 f.add(btnSouth, BorderLayout.SOUTH); 20 f.add(btnNorth, BorderLayout.NORTH); 21 f.add(btnCenter, BorderLayout.CENTER); 22 /* 23 * 也可使用這樣的方式排列按鈕 在把按鈕放置到Frame窗體時使用方向定位的字符串指定按鈕的放置位置 24 * 這種使用方向定位的字符串指定按鈕的放置方式不推薦使用 一旦寫錯了方向字符串就很差檢查出來 25 * 由於即便是寫錯了仍然能夠編譯經過 26 */ 27 /* 28 * f.add(btnEast,"East"); 29 * f.add(btnWest,"West"); 30 * f.add(btnSouth,"South"); 31 * f.add(btnNorth,"North"); 32 * f.add(btnCenter,"Center"); 33 */ 34 f.setSize(200, 200); 35 f.setVisible(true); 36 } 37 }
運行結果:
測試代碼:
1 package cn.javastudy.summary; 2 3 import java.awt.*; 4 5 public class TestGridLayout { 6 public static void main(String args[]) { 7 Frame f = new Frame("GridLayout"); 8 Button btn1 = new Button("btn1"); 9 Button btn2 = new Button("btn2"); 10 Button btn3 = new Button("btn3"); 11 Button btn4 = new Button("btn4"); 12 Button btn5 = new Button("btn5"); 13 Button btn6 = new Button("bnt6"); 14 f.setLayout(new GridLayout(3, 2)); 15 /* 把佈局劃分紅3行2列的表格佈局形式 */ 16 f.add(btn1); 17 f.add(btn2); 18 f.add(btn3); 19 f.add(btn4); 20 f.add(btn5); 21 f.add(btn6); 22 f.pack(); 23 f.setVisible(true); 24 } 25 }
運行結果:
這幾種佈局管理器能夠設置在Frame裏面,也能夠設置在Panel裏面,而Panel自己也能夠加入到Frame裏面,所以經過Frame與Panel的嵌套就能夠實現比較複雜的佈局
實現代碼:
1 package cn.javastudy.summary; 2 3 import java.awt.*; 4 public class TestTenButtons{ 5 public static void main(String args[]){ 6 /*這裏主要是對顯示窗體進行設置*/ 7 Frame f = new Frame("佈局管理器的嵌套使用"); 8 f.setLayout(new GridLayout(2,1));//把整個窗體分紅2行1列的表格佈局 9 f.setLocation(300,400); 10 f.setSize(400,300); 11 f.setVisible(true); 12 f.setBackground(new Color(204,204,255)); 13 /*這裏主要是對Panel進行佈局的設置*/ 14 Panel p1 = new Panel(new BorderLayout()); 15 Panel p2 = new Panel(new GridLayout(2,1));//p2使用2行1列的表格佈局 16 Panel p3 = new Panel(new BorderLayout()); 17 Panel p4 = new Panel(new GridLayout(2,2));//p4使用2行2列的表格佈局 18 /*這裏主要是把按鈕元素加入到Panel裏面*/ 19 p1.add(new Button("East(p1-東)"),BorderLayout.EAST); 20 p1.add(new Button("West(p1-西)"),BorderLayout.WEST); 21 p2.add(new Button("p2-Button1")); 22 p2.add(new Button("p2-Button2")); 23 /*p1裏面嵌套p2,把p2裏面的按鈕做爲p的中間部分裝入到p1裏面*/ 24 p1.add(p2,BorderLayout.CENTER);//把p2做爲元素加入到p1裏面 25 26 p3.add(new Button("East(p3-東)"),BorderLayout.EAST); 27 p3.add(new Button("West(p3-西)"),BorderLayout.WEST); 28 for(int i=0;i<4;i++){ 29 p4.add(new Button("p4-Button"+i)); 30 } 31 /*p3裏面嵌套p4,把p4裏面的按鈕做爲p的中間部分裝入到p3裏面*/ 32 p3.add(p4,BorderLayout.CENTER); 33 34 f.add(p1);//把Panel裝入Frame裏面,以便於在Frame窗體中顯示出來 35 f.add(p3); 36 37 } 38 }
運行結果: