GUI

java基礎學習總結——GUI編程(一)

1、AWT介紹

  

  全部的能夠顯示出來的圖形元素都稱爲ComponentComponent表明了全部的可見的圖形元素,Component裏面有一種比較特殊的圖形元素叫ContainerContainer(容器)在圖形界面裏面是一種能夠容納其它Component元素的一種容器,Container自己也是一種Component的,Container裏面也能夠容納別的Containerhtml

  Container裏面又分爲WindowPannelWindow是能夠獨立顯示出來的,平時咱們看到的各類各樣的應用程序的窗口均可以稱爲WindowWindow做爲一個應用程序窗口獨立顯示出來,Pannel也能夠容納其它的圖形元素,但通常看不見PannelPannel不能做爲應用程序的獨立窗口顯示出來,Pannel要想顯示出來就必須得把本身裝入到Window裏面才能顯示出來。java

  Pannel應用比較典型的就是Applet(JAVA的頁面小應用程序),如今基本上已經不用了,AJAXJAVASCRIPT徹底取代了它的應用。編程

  Window自己又能夠分爲FrameDialogFrame就是咱們平時看到的通常的窗口,而Dialog則是那些須要用戶進行了某些操做(如點擊某個下拉菜單的項)纔出現的對話框,這種對話框就是Dialog佈局

2、組件和容器(Component和Container)

  

2.1.Frame

  

Frame範例:post

複製代碼
 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 }
複製代碼

運行結果以下:學習

  

複製代碼
 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 }
複製代碼

運行結果:測試

  

2.2.Panel

  

Panel範例:this

複製代碼
 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 }
複製代碼

運行結果以下:url

  

3、佈局管理器

  

3.1.第一種佈局管理器——FlowLayout

  

  

測試代碼:spa

複製代碼
 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 }
複製代碼

運行結果以下:

3.2.第二種佈局管理器——BorderLayout

  

   

測試代碼:

複製代碼
 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 }
複製代碼

運行結果:

3.3.第三種佈局管理器——GridLayout(表格佈局管理器)

  

測試代碼:

複製代碼
 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 }
複製代碼

運行結果:

3.4.佈局練習

這幾種佈局管理器能夠設置在Frame裏面,也能夠設置在Panel裏面,而Panel自己也能夠加入到Frame裏面,所以經過FramePanel的嵌套就能夠實現比較複雜的佈局

實現代碼:

複製代碼
 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 }
複製代碼

運行結果:

4、佈局管理器總結

  

相關文章
相關標籤/搜索