J2SE II:圖形技術GUI

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)給予用戶一致的感受。給予用戶一致的感受。對象

繼承關係圖:

img

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: 網格包佈局管理器,非規則的矩陣。

建立圖形化界面步驟:

  1. 建立fame窗體; Frame f = new Frame("窗體名");

  2. 對窗體進行基本設置,例如大小,位置,佈局;

    ①調整組件大小: void setSize(int width , int height); 【寬爲width,長爲height】

    ②組建移動到指定位置: void setLocation(int x , int y);

    ③ 設置容器的佈局管理: voidsetLayout(LayoutManager mgr);

  3. 定義組件; 例:Button b = new Button("組件名稱");

  4. 將組建經過窗體的add方式添加到窗體中;

  5. 讓窗體顯示: 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基礎知識,能夠戳我一塊兒交流學習!

相關文章
相關標籤/搜索