GUI:(Graphical Vser Interface 圖形用戶接口)是指採用圖形方式顯示的計算機操做用戶界面。GUI便捷、準確,實用性很強,主要功能是實現人與計算機等電子設備的人機交互。java
Java爲GUI提供的對象java.Awt和javax.Swing兩個包中。函數
1)java.Awt:工具
Abstract Window ToolKit (抽象窗口工具包),須要調用本地系統方法實現功能。屬重量級控件。佈局
2)javax.Swing:學習
在AWT的基礎上,創建的一套圖形界面系統,其中提供了更多的組件,並且徹底由Java實現。加強了移植性,屬輕量級控件。設計
優勢:3d
(1)swing擁有一個豐富、便捷的用戶界面元素集合。code
(2)swing對平臺的依賴很小,意味着他有不多的關於平臺的bug。orm
(3)給予用戶一致的感受。給予用戶一致的感受。對象
繼承關係圖:
Component:組件
Checkbox:複選框
TextComponen:文本組件,文本框和文本域。
Container:爲容器,是一個特殊的組件,該組件中能夠經過add方法添加其餘組件進來。
Button:按鈕標籤,當按下該按鈕時,應用程序能執行某項動做;
Label:是一個可在容器中放置文本的組件,一個標籤只顯示一行只讀文本;
Checkbox:複選框是一個可處於「開」(true) 或「關」(false) 狀態的圖形組件。單擊複選框可將其狀態從「開」更改成「關」,或從「關」更改成「開」;
Frame:是帶有標題和邊框的頂層窗口;
TextComponent:是全部容許編輯文本的組件的超類;
Window:是一個沒有邊界和菜單欄的頂層窗口。窗口的默認佈局是 BorderLayout;
Panel :面板,是最簡單的容器類。應用程序能夠將其餘組件放在面板提供的空間內,這些組件包括其餘面板;
Frame: 是帶有標題和邊框的頂層窗口;
Dialog:對話框, 帶標題和邊界的頂層窗口,邊界通常用於從用戶處得到某種形式的輸入;
FileDialog :文本對話框,用戶能夠從中選擇文件;
常見的佈局管理器:
1)FlowLayout:
流式佈局管理器,從左到右的順序排列,Panel默認的佈局管理器。
構造方法:
① FlowLayout() 構造一個新的 FlowLayout,居中對齊,默認的水平和垂直間隙是 5 個單位。
② FlowLayout(intalign) 構造一個新的 FlowLayout,對齊方式是指定的,默認的水平和垂直間隙是 5 個單位。
③ FlowLayout(intalign, int hgap, int vgap) 建立一個新的流佈局管理器,具備指定的對齊方式以及指定的水平和垂直間隙。
2)BorderLayout:
邊界佈局管理器,東,南,西,北,中,Frame默認的佈局管理器。
構造方式:
① BorderLayout() 構造一個組件之間沒有間距的新邊界佈局。
②BorderLayout(int hgap, int vgap) 用指定的組件之間的水平間距構造一個邊界佈局。
3)GridLayout: 網格佈局管理器,規則的矩陣。
構造方式:
①GridLayout() 建立具備默認值的網格佈局,即每一個組件佔據一行一列。
② GridLayout(int rows, int cols) 建立具備指定行數和列數的網格佈局。
③GridLayout(int rows, int cols, int hgap, int vgap) 建立具備指定行數和列數的網格佈局,並將水平和垂直間距設置爲指定值。
4)CardLayout: 卡片佈局管理器,選項卡。
5)GridBagLayout: 網格包佈局管理器,非規則的矩陣。
建立圖形化界面步驟:
-
建立fame窗體; Frame f = new Frame("窗體名");
-
對窗體進行基本設置,例如大小,位置,佈局;
①調整組件大小: void setSize(int width , int height); 【寬爲width,長爲height】
②組建移動到指定位置: void setLocation(int x , int y);
③ 設置容器的佈局管理: voidsetLayout(LayoutManager mgr);
-
定義組件; 例:Button b = new Button("組件名稱");
-
將組建經過窗體的add方式添加到窗體中;
-
讓窗體顯示: void setVisible(boolean b)
例:
import java.awt.*; class AwtDemo { public static void main(String[] args) { //定義Frame對象,並在參數位置傳入窗體名 Frame f = new Frame("個人窗體"); //定義窗體大小 f.setSize(300,300); //設置窗體的位置 f.setLocation(400,300); //指定佈局管理器 f.setLayout(new FlowLayout()); //定義一個按鈕組件,並在參數中傳入組件名稱 Button b = new Button("我是按鈕"); //將組建添加到窗體中 f.add(b); //讓窗體顯示 f.setVisible(true); } }
####事件監聽機制:
1,事件監聽機制的特色:
(1)事件源(組件):就是awt包和swing包中的那些圖形界面組件
(2)事件(Event):每一個事件源都有本身特有的對應事件和共性事件。
(3)監聽器(Listener):將能夠觸發某一個事件的動做(不僅一個動做)都封裝在監聽器中。
(4)事件處理:
實現窗體關閉功能實例:
import java.awt.*; import java.awt.event.*; class AwtDemo2 { public static void main(String[] args) { //定義Frame對象,並在參數位置傳入窗體名 Frame f = new Frame("個人窗體"); //定義窗體大小 f.setSize(300,300); //設置窗體的位置 f.setLocation(400,300 //指定佈局管理器 f.setLayout(new FlowLayout()); //定義一個按鈕組件,並在參數中傳入組件名稱 Button b = new Button("我是按鈕"); //將組建添加到窗體中 f.add(b); //爲窗體添加監聽器,將適配器做爲參數傳入構造函數中,定義內部類 f.addWindowListener(new WindowAdapter() { //複寫WindowAdapter類中的方法,建立本身的事件處理方式 //點X能夠關閉窗口,並輸出語句 public void windowClosing(WindowEvent e) { //輸出語句 System.out.println("再見!"); //程序結束 System.exit(0); } //激活窗口時顯示被激活 public void windowActivated(WindowEvent e) { System.out.println("我激活了!"); } //窗口一創建就輸出信息 public void windowOpened(WindowEvent e) { System.out.println("你好!"); } }); //讓窗體顯示 f.setVisible(true); } }
WindowAdapter中的部分方法展現:
①void windowClosing(WindowEvent e) 窗口正處於關閉過程當中調用; ②void windowActivated(WindowEvext e) 激活窗口時調用; ③void windowOpend(WindowEvent e) 打開窗口時調用;
鼠標事件和鍵盤事件:
import java.awt.*; import java.awt.event.*; class MouseAndKeyEvent { private Frame f; private Button but; private TextField tf; MouseAndKeyEvent(){ init(); //初始化GUI界面 } public void init(){ f = new Frame("my frame"); f.setBounds(300,100,600,500); //移動窗口到(300,100)位置,並調整大小爲寬600長500. f.setLayout(new FlowLayout()); //設爲流水佈局 f.setVisible(true); //顯示窗口 but = new Button("退 出"); //按鈕 tf = new TextField(20); //20是這個單行文本框的列數 f.add(tf); //窗口中添加文本框 f.add(but); //窗口中添加按鈕 myEvent(); //事件處理 } private void myEvent() { //事件處理 //窗體事件的處理 f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); //按鈕的Action事件的處理。 but.addActionListener(new ActionListener(){ //匿名內部類 public void actionPerformed(ActionEvent e){ System.out.println("action ok"); } }); //按鈕的鼠標事件。 but.addMouseListener(new MouseAdapter(){ //添加鼠標監聽器,匿名內部類。 private int count = 1; private int clickcount = 1; public void mouseEntered(MouseEvent e){ //鼠標進入but按鈕的範圍,觸發鼠標進入事件。 System.out.println("鼠標進入到該組件"+count++); } public void mouseClicked(MouseEvent e){ //雙擊動做 if(e.getClickCount()==2) System.out.println("鼠標雙擊擊事件"+clickcount++); } }); //鍵盤事件,給But添加一個鍵盤監聽,敲鍵盤則按鈕響應。 but.addKeyListener(new KeyAdapter(){ //匿名內部類。 public void keyPressed(KeyEvent e){ int n = e.getKeyCode(); String s = e.getKeyText(n); System.out.println(s); if(s.equals("Enter")) System.out.println("回車鍵"+"..n:"+n+"..s:"+s); if(e.getKeyCode()==KeyEvent.VK_ESCAPE) //使用靜態常量,"Esc"鍵退出。 System.exit(0); } }); //單行文本框 tf.addKeyListener(new KeyAdapter(){ //匿名內部類。 public void keyPressed(KeyEvent e){ int code = e.getKeyCode(); if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9)){ System.out.println("輸入不合法"); e.consume(); //不使用默認的方式處理此事件。 //使用了此方法,則鍵盤敲'A'時,字母'a'不會再進入文本框。 } } }); } public static void main(String[] args){ new MouseAndKeyEvent(); } }
菜單欄:
Menu:菜單,繼承MenuItem,有右三角的圖標存在,可添加Menu和MenuItem; MenuBar:菜單欄,可添加菜單和菜單條目。通常先建立菜單欄,再建立菜單; MenuItem:菜單條目,也稱菜單項,無右三角的圖標存在,是最終的菜單項;
import java.awt.*; import java.awt.event.*; class MyMenuDemo { private Frame f; //窗體 private MenuBar mb; //菜單欄 private Menu m,subMenu; //菜單 private MenuItem closeItem,subItem; //菜單項 MyMenuDemo(){ init(); //初始化GUI界面 } //初始化 public void init(){ f = new Frame("my window"); //建立框體 f.setBounds(300,100,500,600); //設置大小 f.setLayout(new FlowLayout()); //設置佈局 f.setVisible(true); //顯示Frame窗體 mb = new MenuBar(); //菜單欄 m = new Menu("文件"); //菜單欄中的一個菜單 subMenu = new Menu("子菜單"); closeItem = new MenuItem("退出"); //菜單下拉中的一個菜單項 subItem = new MenuItem("子條目"); m.add(closeItem); //把菜單項添加到菜單中 m.add(subMenu); //菜單中添加一個子菜單 subMenu.add(subItem); //子菜單中添加一個菜單項 mb.add(m); //把菜單添加到菜單欄中 f.setMenuBar(mb); //將此Frame窗體的菜單欄設置爲指定的菜單欄 myEvent(); //事件處理 } public void myEvent(){ //窗體監聽器,點右上角的X號能關閉窗體 f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); //"退出"菜單項的監聽,實現點擊退出 closeItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ System.exit(0); } }); } public static void main(String[] args){ new MyMenuDemo(); } }
最後瞭解一下GUI應用領域:手機通信移動產品,電腦操做平臺,軟件產品,車載系統產品,智能家電產品,遊戲產品,網頁設計等等
謝謝你們閱讀,若是想要知道更多java基礎知識,能夠戳我一塊兒交流學習!