天天看點

Lesson_for_java_day24--java中的GUI

一、GUI詳解:

GUI -- Graphical User Interface
	AWT    (抽象視窗工具集 ) AbstractWindow Toolkit 
		--為簡單的applet程式設計 
		--AWT沒有提供足夠的桌面端的程式所需的特性
		--它不适宜用來建構豐富的桌面圖形界面
	Swing
		--Swing是AWT的擴充和功能加強 
		--是建構java圖形界面标準的API
	SWT(Standard Widget Toolkit)
		--是一個開源的GUI程式設計架構 
		--SWT是IBM為它的Eclipse內建開發環境而開發的圖形使用者界面工具
		
	Swing元件
			Java語言提供的第二代GUI設計工具包,它以AWT為基礎,在AWT内容的基礎上新增
		或改進了一些GUI元件,使得GUI程式功能更強大,設計更容易、更友善。"Swing"是開
		發新元件的項目代碼名,現在,這個名字常用來引用新元件和相關的API。
	AWT元件和對應的Swing元件
			從名稱上很容易記憶和差別。例如,AWT的架構類、面闆類、按鈕類和菜單類,被
		命名為Frame、Panel、Button和Menu,而Swing對應的元件類被命名為JFrame、JPanel、
		JButton和JMenu。與AWT元件相比,Swing元件的名前多一個 “J” 字母。另外,AWT 組
		件在java.awt包中,而Swing元件在javax.swing包中。

Frame:
	Frame是Window的子類,由Frame或其子類建立的對象為一個窗體。
		Frame的常用構造方法:
			--Frame()
			--Frame(String s) 建立标題欄為字元串s的視窗。
			
		Frame的常用方法:
			setBounds(int x,int y,int width,int height)
				設定窗體位置和大小,x,y是左上角坐标,widht和height是寬度和高度
			setSize(int width,int height)
				設定窗體的位置,x,y是左上角坐标
			setLocation(int x,int y)
				設定窗體的大小,widht和height分别是寬度和高度。
			setBackground(Color c)
				設定背景顔色,參數為Color對象。
			setVisible(boolean b)設定是否可見。
			setTitle(String name)  String getTitle()
			setResizable(boolean b)設定是否可以調整大小。
			
Panel:
	Panel對象可以看成可以容納Component的空間
	Panel對象可以擁有自己的布局管理器
	Panel類擁有從其父類繼承來的  
		setBounds(int x,int y,int width,int height)
		setSize(int width,int height)
		setLocation(int x,int y)
		setBackground(Color c)
		setLayout(LayoutManager mgr) 等方法。
	Panel的構造方法為:
		Panel() 使用預設的 FlowLayout類布局管理器初始化。
		Panel(LayoutManager layout)使用指定的布局管理器初始化。

布局管理器:
	ava語言中,提供了布局管理器類的對象可以管理
		管理Component在Container中的布局,不必直接設定Component位置和大小。
		每個Container都有一個布局管理器對象,當容器需要對某個元件進行定位或判斷其
			大小尺寸時,就會調用其對應的布局管理器,調用Container的setLayout方法改
			變其布局管理器對象。
		每種容器都有自己預設的布局管理器。預設地,JPanel使用FlowLayout,而内容窗格
			ContentPane(JApplet、JDialog和JFrame對象的主容器) 使用BorderLayout。如
			果不希望使用預設的布局管理器,則可使用所有容器的父類Container的
			setLayout()方法來改變預設的布局管理器。
	Awt提供了5種布局管理器類:
		FlowLayout、BorderLayout、GridLayout、CardLayout 、GridBagLayout
		
	布局管理器總結:
			Frame是一個頂級視窗,Frame的預設布局管理器為BorderLayout
			Panel無法單獨顯示,必須添加到某個容器中。
				Panel的預設布局管理器為FlowLayout。
			當把Panel作為一個元件添加到某個容器中後,該Panel仍然可以有自己的布局管理器。
			使用布局管理器時,布局管理器負責各個元件的大小和位置,是以使用者無法在這
				種情況下設定元件大小和位置屬性,如果試圖使用Java語言提供的setLocation(),
				setSize(),setBounds()等方法,則都會被布局管理器覆寫。
			如果使用者确實需要親自設定元件大小或位置,則應取消該容器的布局管理器,方法為:
				setLayout(null)

Graphics 類:
	每個Component都有一個paint(Graphics g)用于實作繪圖目的,每次重畫該Component時都自動調用paint方法。
	Graphics類中提供了許多繪圖方法,如:
		drawRect(int x,int y,int width,int height)
		fillRoundRect(int x,int y,int width,int height,int arcWidth,int arcHeight)等
		
布局:
	1、邊框布局:BorderLayout	是JFrame預設布局
	2、流式布局:FlowLayout		是JPanel預設布局
	3、網格布局:GridLayout		
	4、絕對布局:setLayout(null)
	
	setLayout(LayoutManager manager)  設定布局
	
	輕量級容器:
		Container:預設沒有布局,使用時需要設定布局
		JPanel:預設流式布局
		
頂級容器:
	JFrame:用于架構視窗的類,此視窗帶有邊框、标題、用于關閉和最小化視窗的圖示等。帶 GUI 的應用程式通常至少使用一個架構視窗。
	JDialog:用于對話框的類。
	JApplet:用于使用 Swing 元件的 Java Applet 的類
	
中間容器:
	JPanel:最靈活、最常用的中間容器。
	JScrollPane:與 JPanel 類似,但還可在大的元件或可擴充元件周圍提供滾動條。
	JTabbedPane:包含多個元件,但一次隻顯示一個元件。使用者可在元件之間友善地切換。
	JToolBar:按行或列排列一組元件(通常是按鈕)。
		
元件:
	1、按鈕:JButton
	2、複選框:JChexbox
	3、下拉框:JComboBox
	4、标簽:JLable
	5、單選按鈕:JReadButton
	6、文本域:JTextArea
		
           

繼承關系:

Lesson_for_java_day24--java中的GUI

基本元件:

Lesson_for_java_day24--java中的GUI
Lesson_for_java_day24--java中的GUI

簡單執行個體:

package gui;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/*
	建立圖形化界面:
		1、建立frame窗體
		2、對窗體進行基本設定。比如:大小、位置、布局
		3、定義元件
		4、将元件通過窗體的add方法添加到窗體中
		5、讓窗體顯示,通過setVisible(true)
		
	事件監聽機制的特點:
		1、事件源:就是awt包或者swing包中的那些圖形界面元件
		2、事件:每一個事件源都有自己特有的對應事件和共性事件
		3、監聽器:将可以觸發某一個事件的動作(不止一個動作)都已經封裝到了監聽器中
		4、事件處理:我們要做的事情就是對産生的動作進行處理
			1、2、3點java都應經定義好了,直接擷取其對象來用就可以
 */
public class AWTDemo {
	public static void main(String[] args) {
		Frame f = new Frame("my awt");
		f.setSize(500, 400);
		f.setLocation(300,200);
		f.setLayout(new FlowLayout());
		Button b = new Button("我是一個按鈕");
		f.add(b);
		f.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e){
				System.out.println("關閉窗體");
				System.exit(0);
			}
		});
		f.setVisible(true);
	}
}